Fenster Schließen
-
Hallo,
Mein Probelm ist das ich zwei Fenster erstellt habe aber nur eins davon Schließen möchte. Ich habe einen Button im zweiten Formular, der dieses Fenster schließen soll... Probiert habe ich CloseWindow(), daraufhin wird das Fenster aber nur minimiert. PostQuitMessage, schließt leider das gesammte Programm.
Hier mein Programm Code falls es an einen fehler darin gibt. Eine kurz fassung.
Jemand vielleicht ne Idee für mich?LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); void create_main(HWND main); void create_add(HWND add); void radio_set(WPARAM wParam); char szClassName[ ] = "WinProc"; HINSTANCE hInstGlobal; static HWND main, add; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow) { hInstGlobal = hInstance; MSG messages; WNDCLASSEX wincl; wincl.hInstance = hInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; wincl.style = CS_DBLCLKS; wincl.cbSize = sizeof (WNDCLASSEX); wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION); wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION); wincl.hCursor = LoadCursor (NULL, IDC_ARROW); wincl.lpszMenuName = NULL; wincl.cbClsExtra = 0; wincl.cbWndExtra = 0; wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND+1; if (!RegisterClassEx (&wincl)) return 0; main = CreateWindowEx ( 0, szClassName, "CIBA base de datos", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 1000, 700, HWND_DESKTOP, NULL, hInstGlobal, NULL ); create_main(main); ShowWindow(main, nCmdShow); UpdateWindow(main); add = CreateWindowEx ( 0, szClassName, "Neuer Eintrag", WS_DLGFRAME, CW_USEDEFAULT, CW_USEDEFAULT, 640, 800, main, NULL, hInstGlobal, NULL ); create_add(add); ShowWindow (add, nCmdShow); UpdateWindow(add); while (GetMessage (&messages, NULL, 0, 0)) { /* Translate virtual-key messages into character messages */ TranslateMessage(&messages); /* Send message to WindowProcedure */ DispatchMessage(&messages); } return messages.wParam; } LRESULT CALLBACK WindowProcedure (HWND add, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) /* handle the messages */ { case WM_CREATE: break; case WM_COMMAND: if (HIWORD(wParam) == BN_CLICKED) { radio_set(wParam); if (LOWORD(wParam) == button_exit) { CloseWindow(add); } } break; case WM_DESTROY: PostQuitMessage (0); break; default: return DefWindowProc (add, message, wParam, lParam); } return 0; }
Schonmal Danke im Voraus
-
msdn schrieb:
CloseWindow: Minimizes (but does not destroy) the specified window.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms632678(v=vs.85).aspxmsdn schrieb:
DestroyWindow: Destroys the specified window
http://msdn.microsoft.com/en-us/library/windows/desktop/ms632682(v=VS.85).aspx
-
Leider funktioniert das auch nicht so ganz, es werden beide Fenster geschlossen. Wenn ich DestroyWindow benutze
-
Kein Wunder, bei beiden Fenstern verursacht das schließen ja auch (aufgrund von WM_DESTROY) den Aufruf von PostQuitMessage().
Gib den beiden Fenstern doch mal jeweils ne eigene WndProc
-
Du kannst doch einfach mit
ShowWindow(add, SW_HIDE);
das Fenster verstecken (und ggf. mit SW_SHOW wieder einblenden).