DialogBoxParam liefert ein Dialog ohne rahmen und hintergrund... was tun?



  • Hi folks!

    Kaum fang ich n neues projekt an, krig ich wieder stress mit der WinAPI...

    Es geht um folgendes: DialogBoxParam(...) zaubert ein verkrüppeltes dialog auf den bildschirm, das keinen hintergrund, keinen rahmen, keine Minimieren-Schlieessen buttons und keinen icon hat. Die ganzen Comboboxes und OK-CANCEL-Buttons sind jedoch da, scheinen auch zu funktionieren... 😕

    Hätte jemand ne idee wodurch sowas verursacht werden kann?



  • Deine DialogProc ist fehlerhaft. (Rückgabewerte?)



  • Zeig mal ein bissel Quellcode! An DialogBoxParam wird es wohl nicht liegen.

    MfG schirrmie



  • hm... Die DlgProc gibt einfach immer TRUE zurück... wen interessieren eigentlich diese komische rückgabewerte, wozu brauch ich die? sind die irgendwie von immenser bedeutung?

    eine andere, ziemlich konkrete frage: muss ich alle ereignisse von allen componenten in der DlgProc abarbeiten, damits als ganzes funst? kann es evtl dran liegen, dass die List-Boxes erstma leer bleiben und nicht gefüllt werden?

    gibt es noch irgendetwas, woran man bei der implementierung der DlgProc unbedingt denken muss? 🙄

    thx schon ma für ideen... ich teste ma die dlg proc auf einem anderen dialog mit nur 2 buttons, irgendwie muss es doch funktionieren... 😕



  • Quellcode? okay, wenn Sie meinen, Sir! 🤡

    So erstelle ich das dialog: (ists mit GetModuleHandle(NULL) gut so? )

    DialogBoxParam(	GetModuleHandle(NULL),
    		MAKEINTRESOURCE(IDD_TEST),
    		hWnd,
    		ML_Core::DlgProc,
    		(LPARAM)(pD3D));
    

    und hier ist die DlgProc, so wie die grad ist (auf das DirectX spezifische zeugs muss nicht geachtet werden, das stimmt schon alles, bin ich mir ziemlich sicher)

    BOOL CALLBACK ML_Core::DlgProc(HWND hDlg,UINT msg,WPARAM wParam,lParam){
    
    	IDirect3D9* pD3D=reinterpret_cast<IDirect3D9*>(lParam);
    
    	switch(msg){
    	case WM_COMMAND:
    	{
    		switch(LOWORD(wParam)){
    		case IDCANCEL:
    		{
    			EndDialog(hDlg, 0);
    			return TRUE;
    		}break;
    		case IDOK:
    		{
    			EndDialog(hDlg, 0);
    			return TRUE;
    		}break;
    		}
    	}break;
    	}	
    
    	return TRUE;
    }
    

    wär coll wenn mir jez jemand sagen könnt was da nich stimmt 🙄



  • MSDN schrieb:

    Typically, the dialog box procedure should return TRUE if it processed the message, and FALSE if it did not.
    If the dialog box procedure returns FALSE, the dialog manager performs the default dialog operation in response to the message.

    Da du immer TRUE zurückgibst, werden Standard-Aktionen (u.a. Zeichnen der Controls) nicht ausgeführt.
    Du musst also FALSE zurückgeben, wenn du die Nachricht nicht behandelt hast.



  • omfg... 😮
    Danke Mensch Thommy88!! Funktioniert jetzt tatsächlich... wo haste denn das coole zitat rausgesucht? irgendwie hab ich nix vergleichbares in meiner dokumentation gefunden, oder muss man nich unter DialogBox sondern sonswo gugn?
    Danke auf jedn fall!!

    ps: eeey, die leute hätten da echt liba sowas wie DefaultDialogProc() reinbaun sollen, wäre zumindest einheitlich, ich blick da echt nich durch 🙄


Anmelden zum Antworten