Create Dialog, Win32 Api



  • Das ist mein Code mit dem ich (IDD_DIALOG1) erstelle:

    MSG messages;
    HWND hwnd = CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_DIALOG1), 0, MainDialogProc, 0);
    ShowWindow(hwnd, SW_SHOWNORMAL);
    
    while (GetMessage(&messages, NULL, 0, 0))
    {
    	TranslateMessage(&messages);
    	DispatchMessage(&messages);
    }
    

    Das ist die CALLBACK Procedure vom Dialog (IDD_DIALOG1):

    LRESULT CALLBACK MainDialogProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	switch (message)
    	{
    	case WM_COMMAND:
    		switch (wParam)
    		{
    		case IDC_BUTTON_EXIT:
    			SendMessage(hwnd, WM_CLOSE, 0, 0);
    			break;
    		case IDC_BUTTON_MSGBox:
    			MessageBoxA(hwnd, "Test", "MSG Box", MB_OK);
    			break;
    		}
    		break;
    	case WM_DESTROY:
    		PostQuitMessage(0);
    		break;
    	default:
    		return DefWindowProc(hwnd, message, wParam, lParam);
    	}
    	return 0;
    }
    

    Wenn ich nun die Messagebox mit dem Button (IDC_BUTTON_MSGBox) öffne und ich OK drücke, reagiert die Messagebox in keinster Weise, auch wenn ich die Messagebox über das X schliessen möchte, gibt es keine reaktion.
    Ich vermute es hat etwas mit dem Code zutun welches den Dialog erstellt.

    Bitte um Hilfe.


  • |  Mod

    Du hast eine DlgProc. Also musst Du auch DefDlgProc verwenden.

    Das ist keine Fensterprozedur (WndProc)!



  • Danke Martin, dein Tipp hat mich weitergebracht.
    Bevor ich ein neues Thema aufmache, hätte ich noch eine kleine Zusatzfrage zu diesem Thema bei dem ich gerade nicht weiterkomme.

    Ich habe einen Dialog, in diesem Dialog gibt es ein Button ( IDC_BUTTON1). Ich suche nun nach einer möglichkeit um herauszufinden wann immer ...

    • ... dieser Button gedrückt wird.
    • ... dieser Button markiert wird.
    • ... der Mauszeiger sich über diesen Button befindet.

    Gelesen habe ich, dass es irgendwie mit WM_NOTIFY gehen sollte, wie genau weiss ich aber nicht.
    Falls sich jemand damit auskennt würde ich die Hilfe gern in Anspruch nehmen, ansonsten heisst es weiter googlen.


  • |  Mod

    @lovecoffee799
    Ein Button sendet einen BN_CLICK WM_COMMAND immer wnen der Button geklickt und losgelassen wird, also immer erst beim loslassen.

    DSen Hover-Status kannst Du abfragen mit eine BM_GETSTATE Nachricht. Oder Du bekommst auch die BCN_HOTITEMCHANGE Benachrichtigung. WM_NOTIFY ist nicht nötig.

    Dann brauchst Du aber ein Common Control 6.0 Manifest.
    RTFM (Read the fine MSDN)



  • @martin-richter
    Vielen Dank, hat mir weitergeholfen.