Noobfrage: Editfeld - Fenster schließt sich beim klick
-
Hallöchen.
Ich habe letzte Woche mal ein bisschen mit WinAPI angefangen und da ich leider nur ein relativ gutes Tutorial gefunden habe muss ich hier leider meine noobigen Fragen loswerden.
Ich habe (im DevC++) eine Editbox erstellt. Nach dem kompilieren ist die auch da, so wie ich das haben wollte. Allerdings schließt sich das Fenster, sobald ich da draufklicke um was einzugeben. ICh zeig euch hier einfach mal meinen Code:
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { char *buffer = NULL; HWND hButtonEnd; HWND hEditN; switch (message) /* handle the messages */ { case WM_CREATE: hButtonEnd = CreateWindow( "button", "Beenden", WS_CHILD | WS_VISIBLE, 20, 500, 360, 30, hwnd, NULL, ((LPCREATESTRUCT) lParam) -> hInstance, NULL); hEditN = CreateWindowEx (WS_EX_CLIENTEDGE, "EDIT", buffer, WS_CHILD | WS_VISIBLE, 20, 50, 100, 25, hwnd, NULL, ((LPCREATESTRUCT) lParam) -> hInstance, NULL); free(buffer); return 0; case WM_SIZE: MoveWindow(hButtonEnd, LOWORD(lParam) / 2 - 80, HIWORD(lParam) - 30, 160, 22, TRUE); MoveWindow(hEditN, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE); return 0; case WM_COMMAND: if (lParam == (LPARAM)hButtonEnd) { if (HIWORD(wParam) == BN_CLICKED) SendMessage(hwnd, WM_CLOSE, 0, 0); }; case WM_DESTROY: PostQuitMessage (0); /* send a WM_QUIT to the message queue */ break; default: /* for messages that we don't deal with */ return DefWindowProc (hwnd, message, wParam, lParam); }; return 0; };Die Winmain-Funktion brauch ich denk ich mal nicht mitschicken. Die ist sowieso standard.
Schonmal Danke im Vorraus.
-
Ich schenk dir ein
break;
-
Hab jetzt mit break wirklich alles ausprobiert, aber es klappt immer noch nicht.
-
nach der if klammer des
;weg und n
break;hin
-
Gehtg irgendwie auch nicht.
Das Problem ist ja, dass ich einen Beenden-Button habe und wenn ich auf den klicke soll sich das fenster schließen.
Aber das macht es auch, wenn ich auf die Textbox klicke.
-
case WM_COMMAND: if (lParam == (LPARAM)hButtonEnd) { if (HIWORD(wParam) == BN_CLICKED) SendMessage(hwnd, WM_CLOSE, 0, 0); }; break; // <------
-
Die Lösung zu deinem Problem wurde schon geposted.
Und
HWND hButtonEnd; HWND hEditN;solltest du entweder global oder static machen, sonst wird dein WM_SIZE und WM_COMMAND code auch nicht funktionieren.
-
Vielen Dank.
Jetzt klappts. Und verzeiht mir meine simple Frage.