Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对话框打开后立即关闭_C++_Winapi_Dialog - Fatal编程技术网

C++ 对话框打开后立即关闭

C++ 对话框打开后立即关闭,c++,winapi,dialog,C++,Winapi,Dialog,我有一个用于用户输入的对话框,它工作得很好,现在无论我做什么,对话框都会弹出一秒钟,然后程序在没有警告的情况下死掉,调用WM_DESTROY,即使我注释掉了所有可能的出口。只有一个错误,那就是no\u init\u all错误,但是每次出现运行时错误时都会显示出来,并且在试图找到解决方案时是毫无用处的 这是我的密码: project.cpp BOOL CreateMyDialog(HINSTANCE hInstance) { HWND hWnd = CreateDialog(NULL,

我有一个用于用户输入的对话框,它工作得很好,现在无论我做什么,对话框都会弹出一秒钟,然后程序在没有警告的情况下死掉,调用
WM_DESTROY
,即使我注释掉了所有可能的出口。只有一个错误,那就是
no\u init\u all
错误,但是每次出现运行时错误时都会显示出来,并且在试图找到解决方案时是毫无用处的

这是我的密码:

project.cpp

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;
}
project.rc

MyDialogResourceDialogEx600400286108
样式DS|U系统模式| DS|U设置字体| DS|U设置前景| DS|U固定系统| WS|U弹出窗口| WS|U可见| WS|U标题
EXSTYLE WS_EX_OVERLAPPEDWINDOW/*| WS_EX_APPWINDOW*/
标题“我的对话”
字体8,“MS Shell Dlg”,400,0,0x1
开始
组合框下拉列表,112,7,61,30,CBS|u下拉列表| WS|u VSCROLL | WS|u TABSTOP
//... 所有语法正确的控件在对话框出现在屏幕上的一瞬间仍然有效
结束
这是缩短的代码,即使这样,对话框也会自动打开,并在屏幕上出现故障。对于我的完整代码,它通常会在应用程序关闭前的一瞬间出现。我相信如果我能解决这个小问题,我就能在对话中找到问题所在。所以我的问题是,问题是什么

编辑:

这是我的
wWinMain

HWND myDialogGlobalHandle;
int APICENT wWinMain(_In_HINSTANCE HINSTANCE,_In_opt_HINSTANCE HPPreInstance,_In_LPWSTR lpCmdLine,_In_int nCmdShow){
未引用的_参数(HPPreInstance);
未引用的_参数(lpCmdLine);
INITCOMMONCONTROLSEX InitCtrlEx;
InitCtrlEx.dwSize=sizeof(INITCOMMONCONTROLSEX);
InitCtrlEx.dwICC=ICC_PROGRESS_CLASS;
InitCommonControlsEx(&InitCtrlEx);
如果(!CreateMyDialog(hInstance)){
//返回FALSE;
}
否则{
MSG message={0};
while(GetMessage(&message,nullptr,0,0)){
if(!IsDialogMessage(myDialogGlobalHandle,&message)){
DispatchMessage(&message);
}
}
}
HACCEL hAccelTable=装载加速器(hInstance,MAKEINTRESOURCE(IDC_项目));
味精;
//主消息循环:
while(GetMessage(&msg,nullptr,0,0))
{
if(!TranslateAccelerator(msg.hwnd、hAccelTable和msg))
{
翻译信息(&msg);
发送消息(&msg);
}
}
返回(int)msg.wParam;
}

事实证明,我所有的代码都是正确的。问题在于我的对话框过程中的
case
语句,由于某种原因,Visual Studio不喜欢
case
语句中的括号。尝试了所有东西,然后用
break替换它们语句,我的代码再次开始工作。

请不要在问题中编辑解决方案公告。为自己创建一个答案,或者接受其中一个现有答案。为什么有两个消息循环?为什么要对对话框接收到的每条消息初始化ComCtrl库?该初始化根本不属于
myDialogProcess()
中。很高兴您自己找到了解决方案。你能发布一个答案来结束这个帖子吗?这将对其他社区有益。