DialogBox无法正确绘制对话框

问题描述 投票:-1回答:1

因此,我有以下对话框模板,该模板保存在.rc文件中:

DIALOG_TEST DIALOG 0, 0, 186, 95
STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "Ms Shell Dlg"
{
    PUSHBUTTON      "Cancel", IDD_CAN, 129, 24, 50, 14, 0, WS_EX_LEFT
    DEFPUSHBUTTON   "OK", IDD_OK, 129, 7, 50, 14, 0, WS_EX_LEFT
}

我以下列方式使用DialogBox称呼:

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{

    HWND button;
    switch (message)                  /* handle the messages */
    {
        case WM_CREATE:
            button = CreateWindowEx(WS_EX_CLIENTEDGE, "BUTTON",
                                     "Test",
                                     WS_VISIBLE | WS_CHILD | WS_BORDER,
                                     200, 40, 200, 30,
                                     hwnd, (HMENU) 1, NULL, NULL);
            break;

        case WM_COMMAND:
           switch(LOWORD(wParam))
            {
                case 1:
                    DialogBox(GetModuleHandle(NULL), TEXT("DIALOG_TEST"),
                              hwnd, AboutDlgProc);
                    break;
            }
            break;
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}

所有工作正常,但由于某种原因未正确绘制窗口:

enter image description here

就像对话框被绘制两次一样,我在做什么错?

关于对话框的窗口过程,它唯一要做的就是在按下“取消”时关闭窗口。

    BOOL CALLBACK AboutDlgProc(HWND hDlg, UINT message,
    WPARAM wParam, LPARAM lParam)
{

   switch (message)
    {

     case WM_COMMAND:

        switch(HIWORD(wParam))
        {

            case BN_CLICKED:

                switch (LOWORD (wParam))
                {
                    case IDD_CAN:
                    EndDialog(hDlg, TRUE);
                    return TRUE ;
                }

                break;
        }

        break;
    }
}
winapi win32gui
1个回答
1
投票

一个按钮可以在WM_COMMAND消息中发送多种通知,因此,如果仅在单击该按钮时要创建对话框,则需要检查以确保该通知代码(在HIWORD(wParam)中) BN_CLICKED。参见WM_COMMAND documentation

© www.soinside.com 2019 - 2024. All rights reserved.