对话框打开后立即关闭

时间:2021-01-01 11:45:19

标签: c++ winapi dialog

我有一个用于用户输入的对话框,它工作得很好,现在无论我做什么,对话框都会弹出一秒钟,然后程序在没有警告的情况下终止,调用 {{1}即使在我注释掉所有可能的退出之后。只有一个错误,即 WM_DESTROY 错误,但每次出现运行时错误时都会出现该错误,并且在试图找到解决方案时毫无用处。

这是我的代码:

project.cpp

no_init_all

项目.rc

BOOL CreateMyDialog(HINSTANCE hInstance) {
    HWND hWnd = CreateDialog(NULL, MAKEINTRESOURCE(myDialogResource), NULL, (DLGPROC)myDialogProcess);
    if (!hWnd) {
        return FALSE;
    }
    myDialogGlobalHandle = hWnd;
    ShowWindow(hWnd, SW_SHOW);
    //UpdateWindow(hWnd);

    return TRUE;
}

INT_PTR CALLBACK myDialogProcess(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
    INITCOMMONCONTROLSEX InitCtrlEx;

    InitCtrlEx.dwSize = sizeof(INITCOMMONCONTROLSEX);
    InitCtrlEx.dwICC = ICC_PROGRESS_CLASS;
    InitCommonControlsEx(&InitCtrlEx);

    switch(msg) {
        case WM_INITDIALOG: {
            //Do stuff to prep the dialog
            return TRUE;
        }
        case WM_DESTROY: {
            PostQuitMessage(WM_QUIT);
            break;
        }
    }
    return TRUE;
}

这是缩短的代码,即使这样,对话框也会在其自身顶部打开并在屏幕上出现故障。使用我的完整代码,它通常会在应用程序关闭前出现一瞬间。我相信如果我能解决这个小问题,我可以通过我的对话找到问题。所以我的问题是,有什么问题?

编辑:

这是我的myDialogResource DIALOGEX 600, 400, 286, 108 STYLE DS_SYSMODAL | DS_SETFONT | DS_SETFOREGROUND | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION EXSTYLE WS_EX_OVERLAPPEDWINDOW /*| WS_EX_APPWINDOW*/ CAPTION "My Dialog" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN COMBOBOX dropdownList,112,7,61,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP //... it's all syntactically correct controls that still work the split second the dialog is on the screen END

wWinMain

1 个答案:

答案 0 :(得分:0)

事实证明,我所有的代码都是正确的。问题在于我的对话过程中的 case 语句,出于某种原因,Visual Studio 不喜欢 case 语句中的括号。在尝试了所有方法,然后将它们替换为 break; 语句后,我的代码又开始工作了。