Win 32 API Textboxen

Seltsam, wenn du die Variable global deklarierst, dann muss auf die Variable von überall zugegriffen werden können.

Wenn dein Programm nun kompiliert wird, aber keine Ausgabe macht, dann liegt das Problem irgendwo anders. Poste mal deinen aktuellen Code, dann können wir hier weiterhelfen.
 
Code:
#include <windows.h>

int Box_id = 123;
int IBox_id= 124;
int button_id= 125;
HWND Textbox;
HWND Textbox2;


bool Prozedur(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
void ausgeben(HWND textbox, HWND Itextbox);



void ausgeben(HWND textbox, HWND Itextbox)
{
                  int x = GetWindowTextLength(textbox);
                  char buffer[x];
                  GetWindowText(textbox, buffer,x+1);
                  
                  int y = GetWindowTextLength(Itextbox);
                  char Ibuffer[y];
                  GetWindowText(Itextbox ,Ibuffer,x+1);
                
                  char mainBuffer[x+y+1];
                  strcpy(mainBuffer, buffer);
                  strcat(mainBuffer, " ");
                  strcat(mainBuffer, Ibuffer);
                  MessageBox(NULL, mainBuffer, "Inhalt", MB_OK);
     }


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);
    HWND Textbox2= CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", WS_VISIBLE | WS_CHILD, 10, 55, 200, 25, Fenster, (HMENU)IBox_id, NULL, NULL);
    HWND Button  = CreateWindowEx(0, "BUTTON", "Ausgeben", WS_VISIBLE | BS_PUSHBUTTON | WS_CHILD, 10, 85, 100, 25, Fenster, (HMENU)button_id, NULL, NULL);
    
    SetWindowLong(Fenster, DWL_DLGPROC, (long)Prozedur);
    
    while(GetMessage(&msg, NULL, 0, 0))
    {
                           TranslateMessage(&msg);
                           DispatchMessage(&msg);
                           }

    return 0;
    }

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 
                }
     if(message == WM_COMMAND && LOWORD(wParam) == button_id)
     {
                ausgeben(Textbox, Textbox2);
                }
     
     return 0;
     }

ich hatte daraus jetz ne Funktion gemacht .. aber wenn man den Inhalt der Funktion in die if-Bedingung des Buttons packt erzielt man das selbe Resultat ..

ich glaub nich dasses am Quellcode liegt ..
 
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 .. :] )
C:
int x = GetWindowTextLength(Textbox);
int y = GetWindowTextLength(Textbox2);

char buf[x + y + 1];

int c = GetWindowText(Textbox, buf, x+1);
GetWindowText(Textbox2, buf + c, y+1);
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 ..
Am einfachsten wäre eine globale Definition, da hat Bullja schon recht. Wenn das bei dir nicht geht, dann zeig deinen Code.

Gruß
 
Hi.

Du hast die Textboxen doppelt definiert, einmal global und dann innerhalb der Funktion. Da die Definition in der Funktion die global definierten Textboxen überschattet, kannst du später auch nicht darauf zugreifen, da die Werte gar nicht gesetzt sind.

Gruß
 
Jaa .. richtig .. und wenn ich die Textboxen nur in der WinMain definiere dann kennt die Prozedur die Boxen nich (undeclared .. )

daraus resultiert die Frage wie ich der Prozedur HWND Textbox übergeben kann ..

ich habs wie oben schon gesagt auch inner Funktion schon versucht um das zu umgehen aber anscheinend geht das auch nicht ..

Wie schon gesagt -.- ...
 
Jaa .. richtig .. und wenn ich die Textboxen nur in der WinMain definiere dann kennt die Prozedur die Boxen nich (undeclared .. )

daraus resultiert die Frage wie ich der Prozedur HWND Textbox übergeben kann ..

ich habs wie oben schon gesagt auch inner Funktion schon versucht um das zu umgehen aber anscheinend geht das auch nicht ..

Wie schon gesagt -.- ...
Die Lösung wurde dir doch schon mehrfach an den Kopf geworfen: definiere die Textboxen ausschließlich global und nicht nochmal extra innerhalb der Funktion.

Gruß
 
Die Lösung wurde dir doch schon mehrfach an den Kopf geworfen: definiere die Textboxen ausschließlich global und nicht nochmal extra innerhalb der Funktion.

eine Textbox ausschließlich Global .. wie soll das denn gehen ?!
HWND Textbox = CreateWindowEx( ... ) kann man doch wohl nicht nur global definieren, weils doch mit ner Funktion zusammenhängt ..

wenn doch dann gib endlich ma n Handfestes Beispiel sonst schreiben und streiten wir hier noch über Seiten im zweistelligen bereich .. -.-
 
Code:
#include <windows.h>

int Box_id = 123;
int IBox_id= 124;
int button_id= 125;
HWND Textbox;
HWND Textbox2;


bool Prozedur(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
void ausgeben(HWND textbox, HWND Itextbox);



void ausgeben(HWND textbox, HWND Itextbox)
{
                  int x = GetWindowTextLength(textbox);
                  char buffer[x];
                  GetWindowText(textbox, buffer,x+1);
                  
                  int y = GetWindowTextLength(Itextbox);
                  char Ibuffer[y];
                  GetWindowText(Itextbox ,Ibuffer,x+1);
                
                  char mainBuffer[x+y+1];
                  strcpy(mainBuffer, buffer);
                  strcat(mainBuffer, " ");
                  strcat(mainBuffer, Ibuffer);
                  MessageBox(NULL, mainBuffer, "Inhalt", MB_OK);
     }


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);
    
    Textbox = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", WS_VISIBLE | WS_CHILD, 10, 25, 200, 25, Fenster, (HMENU)Box_id, NULL, NULL);
    Textbox2= CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", WS_VISIBLE | WS_CHILD, 10, 55, 200, 25, Fenster, (HMENU)IBox_id, NULL, NULL);
    HWND Button  = CreateWindowEx(0, "BUTTON", "Ausgeben", WS_VISIBLE | BS_PUSHBUTTON | WS_CHILD, 10, 85, 100, 25, Fenster, (HMENU)button_id, NULL, NULL);
    
    SetWindowLong(Fenster, DWL_DLGPROC, (long)Prozedur);
    
    while(GetMessage(&msg, NULL, 0, 0))
    {
                           TranslateMessage(&msg);
                           DispatchMessage(&msg);
                           }

    return 0;
    }

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 
                }
     if(message == WM_COMMAND && LOWORD(wParam) == button_id)
     {
                ausgeben(Textbox, Textbox2);
                }
     
     return 0;
     }
 
Zurück