Kein Zugriff auf Editbox
-
Hallo zusammen,
habe ein Problem bzgl editboxen. Habe per google nicht das gefunden was ich suche.Habe ein Hauptfenster und ein Childfenster vom Hauptfenster.
Das childfenster öffnet sich, wenn ich auf ein button im HFenster drücke.
Im CFenster ist eine Editbox in der ich Text auslesen will. Die Editbox selbst ist wieder Child vom Childfenster.Ich kann aber kein Text darein schreiben, weil ich die box nicht anwählen kann. Weiß nicht warum.
Editbox in CFenster was den handle hAdd hat.
CreateWindowEx( WS_EX_CLIENTEDGE, "edit", "Name", WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS, 20,20,160,22, hAdd, 0, 0, 0);
create code von CFenster
hAdd = CreateWindow( strAdd, "Hinzufügen", WS_VISIBLE | WS_MAXIMIZE | WS_CHILD | WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS, 20,20,400,400, hMain, 0, 0, 0);
Haupt und Childfenster haben verschiebe WndProcs. Die Editbox in CFenster wird per WM_CREATE in der prozedur von CFenster erstellt. CFenster selbst wird in der Prozedur vom HFenster erstellt, durch WM_COMMAND - button.
das problem kann ich umgehen, indem ich das Fenster worin meine editbox ist nicht als ChildWindow erstelle, aber das möchte ich nicht. Ich möchte, dass das Hauptfenster von nem anderen überlagert wird, damit es so aussieht als würde sich der Inhalt vom Hauptfenster ändern. Das Fenster soll halt das Komplette hauptfenster ausfüllen, aber nicht drüber weggehen.
mfg Jan
-
Wie sieht denn Deine MessagePump aus?
http://www.mvps.org/user32/modal.html
http://msdn.microsoft.com/en-us/library/windows/desktop/ms644996(v=vs.85).aspx#modeless_box
-
was ist denn eine MessagePump?
-
die von meinem hauptfenster
LRESULT CALLBACK MainProc(HWND hMain, UINT message, WPARAM wParam, LPARAM lParam){ switch( message ){ case WM_CREATE: //===== BUTTONS OBEN =====// CreateWindow( "button", "Hinzufügen", WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS, 60,60,150,150, hMain, (HMENU) 1, 0, 0); CreateWindow( "button", "Entfernen", WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS, 230,60,150,150, hMain, (HMENU) 2, 0, 0); //===== BUTTONS UNTEN =====// CreateWindow( "button", "Suchen", WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS, 60,230,150,150, hMain, (HMENU) 3, 0, 0); CreateWindow( "button", "Bearbeiten", WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS, 230,230,150,150, hMain, (HMENU) 4, 0, 0); //===== EDITBOXEN =====// hFirstName = CreateWindowEx( WS_EX_CLIENTEDGE, "edit", "", WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS, 425,80,160,22, hMain, 0, 0, 0); hName = CreateWindowEx( WS_EX_CLIENTEDGE, "edit", "", WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS, 425,140,160,22, hMain, 0, 0, 0); return 0; /* KOMMANDOS HAUPTFENSTER */ /* -------------------- */ case WM_COMMAND: { switch( wParam ) { case 1: hAdd = CreateWindow( strAdd, "Hinzufügen", WS_VISIBLE | WS_MAXIMIZE | WS_CHILD | WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS, 20,20,400,400, hMain, 0, 0, 0); //EnableWindow(hAdd, TRUE); return 0; } // END SWITCH return 0; } // END CASE WM_COMMAND case WM_DESTROY: { PostQuitMessage(0); return 0; } } // END SWITCH return DefWindowProc(hMain, message, wParam, lParam); } // END MainProc
die von meinem childfenster
LRESULT CALLBACK AddProc(HWND hAdd, UINT message, WPARAM wParam, LPARAM lParam){ switch( message ) { case WM_CREATE: { CreateWindowEx( WS_EX_CLIENTEDGE, "edit", "", WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS, 20,20,160,22, hAdd, 0, 0, 0); CreateWindowEx( WS_EX_CLIENTEDGE, "button", "beenden", WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS, 50,200,160,22, hAdd, (HMENU) 11, 0, 0); return 0; } case WM_COMMAND: { switch( wParam ) { case 11: { DestroyWindow(hAdd); return 0; } }// END SWITCH return 0; } case WM_CLOSE: { //EnableWindow(hMain, TRUE); DestroyWindow(hAdd); return 0; } } // END SWITCH return DefWindowProc(hAdd, message, wParam, lParam); } // END AddProc
-
Such mal nach "GetMessage"... das ist dann Deine MessagePump...
-
while (GetMessage(&msg,NULL,0,0)) { if (!IsDialogMessage(hMain, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } return msg.wParam; } // PROGRAMM ENDE
-
Ich kann so da keinen Fehler erkennen.
Vielleicht solltest Du Dich mal mit Dialogen beschäftigen...
Was Du hier baust scheint eigentlich durch Dialoge auch vollkommen abgedeckt. Was aber nicht Dein Problem löst. Es sieht so, aus als ob Nachrichten nicht behandelt werden.Bist Du sicher, dass Du die richtige WndProc und Klasse angegeben hast?
Sez doch mal einen Breakpoint, oder beobachte Deine Applikation mit Spy++