Dialog als Hauptfenster



  • Hallo, wie kann ich einen Dialog als Hauptfenster einer Anwendung anzeigen lassen? Ausgangspunkt ist ein mit Visual Studio 2008 erstelltes Win 32 Programm. Wenn ich dieses Kompiliere habe ich ein Fenster mit Menü und einem leeren weißen Haupfenster. Dieses leere Hauptfenster möchte ich jetzt sozusagen durch einen Dialog ersetzen. Versucht habe ich es folgendermaßen:

    int APIENTRY _tWinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPTSTR    lpCmdLine,
                         int       nCmdShow)
    {
    	UNREFERENCED_PARAMETER(hPrevInstance);
    	UNREFERENCED_PARAMETER(lpCmdLine);
    
     	MSG msg;
    	HACCEL hAccelTable;
    
    	LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    	LoadString(hInstance, IDC_KEYGENERATOR, szWindowClass, MAX_LOADSTRING);
    	MyRegisterClass(hInstance);
    
    	if (!InitInstance (hInstance, nCmdShow))
    	{
    		return FALSE;
    	}
    
    	hDlgModeless = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_MAIN_DLG), hWnd, (DLGPROC)WndProcDlg);
    
        hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_KEYGENERATOR));
    
    	while (GetMessage(&msg, NULL, 0, 0))
    	{
    		if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
    		{
    			TranslateMessage(&msg);
    			DispatchMessage(&msg);
    		}
    	}
    
    	return (int) msg.wParam;
    }
    

    Der Aufruf von CreateDialog führt leider nicht zum Erfolg. Habe ich etwas vergessen?



  • Du erzeugst nur das Dialogfenster, rufst dieses aber nicht explizit auf. Hier ist in der Warteschleife des Hauptfensters ein solcher Aufruf erforderlich, der ähnlich wie aus einem Menüpunkt zu erfolgen hat. Ansonsten: mit SendMessage(...) geht alles! Und überhaupt: Fenster bleiben Fenster, man kann sie gegenseitig nicht ersetzen, nur die Anzeige und etwas mehr beeinflussen.



  • Welches hWnd gibst Du der Funktion "CreateDialog" mit? Es wird nirgendwo deklariert/initialisiert und muss beim TopLevel-Window Deiner Anwendung NULL sein. Deine MessageLoop sollte übrigens auch "IsDialogMessage" aufrufen.



  • EDIT:

    Hat sich erledigt, ich hatte den Aufruf von

    ShowWindow(hDlg,SW_SHOW);
    

    für das Dialogfenster vergessen.


Anmelden zum Antworten