Zwei Fenster



  • Hallo,

    Ich habe mit folgendem Code ein zweites Fenster erstellt:

    int WINAPI CreateSubWindow(HWND hWnd, HINSTANCE hInstance, DWORD dwStyle, RECT& rect, int ID, const char* text, const char* ClassName) {
    	WNDCLASSEX wc = {0};
    	MSG Msg;
    	wc.cbSize		 = sizeof(WNDCLASSEX);
    	GetClassInfoEx(NULL, "Window", &wc);
    	wpOldProc_SubWindow = wc.lpfnWndProc;
    
    	wc.lpszClassName = ClassName;
    	wc.lpfnWndProc	 = SubWindowProc;
    	wc.hInstance	 = hInstance;
    	wc.hCursor		 = LoadCursor(NULL, IDC_ARROW);
    
    	wc.hbrBackground = HBRUSH(COLOR_WINDOW);
    	wc.hIcon		 = LoadIcon(NULL, IDI_APPLICATION);
    	wc.hIconSm		 = LoadIcon(NULL, IDI_APPLICATION);
    
    	if (!RegisterClassEx(&wc)) {
    		MessageBox(NULL, "Ein Element konnte nicht erstellt werden (\"CreateButton_RegisterClassEx\").", "CreateButton_RegisterClassEx", MB_ICONEXCLAMATION | MB_OK);
    		return 0;
    	}
    
    	SubWindow =	CreateWindowEx(NULL,
    								ClassName,
    								text,
    								dwStyle,
    								rect.left,
    								rect.top,
    								rect.right,
    								rect.bottom,
    								hWnd,
    								reinterpret_cast<HMENU>(static_cast<INT_PTR>(ID)),
    								hInstance,
    								NULL);
    
    	while (GetMessage(&Msg, NULL, 0, 0) > 0) {
    		if (!IsDialogMessage(SubWindow, &Msg)) {
    			TranslateMessage(&Msg);
    			DispatchMessage(&Msg);
    		}
    	}
    	return Msg.wParam;
    }
    

    Das habe ich gemacht, weil man ansonsten die Tab-Funktion in dem zweiten Fenster nicht benutzen könnte.

    Das Problem ist nun, dass beim Schließen des Hauptfensters anscheinend das zweite Fenster nicht geschlossen wird.

    Wie beendet man den Message-Loop in der While-Schleife?



  • Such mal nach WM_QUIT oder so ähnlich


  • Mod

    Und warum bitte verwendest Du keinen modalen Dialog. Das ist doch genau die Funktionalität, die Du hier abbildest?



  • Martin Richter schrieb:

    Und warum bitte verwendest Du keinen modalen Dialog. Das ist doch genau die Funktionalität, die Du hier abbildest?

    Ich bin zwar nicht Navy, aber es ist doch nicht ungewoehnlich, dass hin und wieder die vorhandene Funktionalitaet nicht ausreicht und man es besser macht?!


  • Mod

    Wenn musst Du selbst die entsprechenden Fenster mit DestroyWindow schließen oder ein WM_CLOSE senden.

    Zu modalen Dialogen: Das kannst Du kaum besser machen und die vorhandene Funktionalität ist einfachst durch Subclassing und die entsprechende Dialogprozedur erweiterbar.

    Ansonsten schau Dir an wie die MFC Dialoge implementiert, da kann man sich was abkucken. Die macht das auch nicht über die Windows API.



  • Das mit den Fenster klappt so weit.

    Allerdings: Ich weiß nicht, wie viele Fenster es gibt. Das bestimmt der User.
    Nun ist das Problem, dass ich gerne wissen würde, welcher Button auf welchem Fenster angeklickt wurde.

    Wenn ich dem Fenster ein HMENU indiziere, dann wird keines erstellt (hWnd = NULL).



  • GetParent hat das Problem gelöst 🙂


Log in to reply