Win 32 API Textboxen

System_Shutdown

Grünschnabel
Hey Hey ..

bin neu hier und wenn ich eventuelle bestehende Themen übersehen hab sry ..

Also: ich Programmiere schon ne Zeilt lang Win 32 API unter C++

ich kriegs jetz schon hin Buttons und Textboxen zu erstellen und auch Funktionen hinzuzufügen ..

jedoch bräuchte ich noch Codebeispiele um von Textboxen den Inhalt auszulesen und damit etwas zu machen zB. n Fenster mit 2 Textboxen von denen der Inhalt (Zahl) zB addiert wird ..

danke im Vorraus wenn mir jmnd. helfen kann ^^ ..

ps: bitte keine Links zu Tutorials (ich glaub mitlerweile kenn ich schon alle Tutorials dies über Win 32 API gibt ) danke
 
Zuletzt bearbeitet:
Code:
int x = GetWindowTextLength(name_der_textbox);
char buffer[x];
GetWindowText(name_der_textbox,buffer,x+1);

// damit hast du den Inhalt als char[] im buffer
// wenn du das als int brauchst, zum rechnen

int Zahl = atoi(buffer);
 
ahhh !! .. Danke klappt super ^^

für alle die später das gleiche Problem haben sollten hier der komplette Quellcode:

Code:
#include <windows.h>

int Box_id = 123;

bool Prozedur(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
     if(message == WM_CLOSE){; PostQuitMessage(0);}
     if(message == WM_COMMAND && HIWORD(wParam) == EN_CHANGE && LOWORD(wParam) == Box_id)
     {
              //weitere Funktionen die beim ändern des Textes passieren sollen 
                }
     
     return 0;
     }

int WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    
    MSG msg;
    HWND Fenster = CreateWindowEx(0, WC_DIALOG, "Fenster", WS_VISIBLE | WS_OVERLAPPEDWINDOW, 1, 1, 400, 300, NULL, NULL, NULL, NULL);
    
    HWND Textbox = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", WS_VISIBLE | WS_CHILD, 10, 25, 200, 25, Fenster, (HMENU)Box_id, NULL, NULL);
    
    SetWindowLong(Fenster, DWL_DLGPROC, (long)Prozedur);
    
    while(GetMessage(&msg, NULL, 0, 0))
    {
                           TranslateMessage(&msg);
                           DispatchMessage(&msg);
                           }
    
                  int x = GetWindowTextLength(Textbox);
                
                char buffer[x];
                GetWindowText(Textbox ,buffer,x+1);
                
                MessageBox(NULL, buffer, "Inhalt", MB_OK);
    
    return 0;
    }

Danke nochmal für die schnelle Antwort !! ..
 
Noch ne Frage:

Wie kann ich es erreichen mit ner MessageBox mehrere Variablen auf einmal auszugeben ..

ich krieg dann nämlich immer n Fehler, dass ich sie bei:

Code:
                  int x = GetWindowTextLength(Textbox);
                  char buffer[x];
                  GetWindowText(Textbox, buffer,x+1);
                  
                  int y = GetWindowTextLength(Textbox2);
                  char Ibuffer[y];
                  GetWindowText(Textbox2 ,Ibuffer,x+1);
                
                  char mainBuffer[x+y+1];
                  mainBuffer = buffer + " " + Ibuffer;
                  MessageBox(NULL, mainBuffer, "Inhalt", MB_OK);

in der vorletzten Zeile nich addieren darf

(invalid operands of types `char[((unsigned int)((int)x))]' and `const char[2]' to binary `operator+' )

Danke für weitere Antworten ..
 
Zuletzt bearbeitet:
Hey ! Danke klappt :] .. obwohl ich kein Fan von C bin .. egal
Was machst du dann hier? ^^

Übrigens reservierst du nicht genug Speicher bzw. übergibst falsche Werte an die GetWindowText Funktion. Der 3. Parameter gibt die max. Länge inklusive des abschließenden NUL Zeichens an. Da du Speicher für x Zeichen reserviert hast, kannst du nicht einfach x + 1 dort angeben. Du müßtest vielmehr x+1 Zeichen reservieren.

Gruß
 
Code:
                  char mainBuffer[x+y+1];
                  strcpy(mainBuffer, buffer);
                  strcat(mainBuffer, " ");
                  strcat(mainBuffer, Ibuffer);
                  MessageBox(NULL, mainBuffer, "Inhalt", MB_OK);

Ich würde wsprintf verwenden.
Beispiel:
Code:
#include <windows.h>
#include <iostream.h>

using namespace std;

int main()
{
    char buffer[1000];
    int i=1; char ch[]="meine char";

    wsprintf (buffer, "Int i = %i; char ch = %s", i, ch);

    cout << buffer << endl;
    system("pause");
}

@ System_ShutDown
Das soll ja nur ein Beispiel sein. Funktioniert genauso in einem API-Programm :rolleyes:
 
Zuletzt bearbeitet:
Also:

1. ich bin kein Fan von C aber von C++ xDD .. das suche ich hier ^^

2. Wenn du weiter oben guckst siehst du das Thomasio mir diesen Code-Schnipsel zugeworfen hat .. ich habs nur mit in meinen bisherigen Quellcode eingefügt bzw. verändert (also wenn du ihn vllt. "Reparieren" könntest .. :] )

3. Ich hab leider gottes noch ne Frage -.-' (sry ich nerve schon langsam ich weiss .. )

Wenn ich die Bisherige Aufgabe (also den Text aus 2 Textboxen in einer MessageBox auszugeben) nun auf einen Button übertragen will, habe ich wieder ein Problem.

wenn ich die Anweisung in der Nachrichten-Prozedur für einen Button schreibe ..
Code:
if(message == WM_COMMAND && LOWORD(wParam) == button_id){ ... }

.. dann hab ich das Problem das der Compiler mir sagt, dass er in folgender Zeile:
Code:
int x = GetWindowTextLength(textbox);

nicht weiss was textbox is ("textbox" undeclared first use this function)

..nun weiss ich aber nicht wie ich aber der Prozedur sonst die HWND Namen der Textboxen übergeben kann ..

Danke für euer Durchhaltevermögen ( ^^ ) und eure Hilfe !!
 
@Jacal .. du weisst aber schon worums hier geht oder ? ..

das is hier kein Konsolenprogrammieren ..


@ System_ShutDown
Das soll ja nur ein Beispiel sein. Funktioniert genauso in einem API-Programm

"Genauso" is ja wohl n bischen hochgegriffen .. außerdem is das Problem doch schon beseitigt ..

Und es gibt meines wissens keine Vergleichbare Funktion ..
 
Zuletzt bearbeitet:
Zurück