Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.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++ GetMessage()函数的使用_C++_Windows_Winapi_Visual C++_User Interface - Fatal编程技术网

C++ GetMessage()函数的使用

C++ GetMessage()函数的使用,c++,windows,winapi,visual-c++,user-interface,C++,Windows,Winapi,Visual C++,User Interface,我通过msdn了解了GetMessage和DispatchMessage(&msg)函数。 我用Visual C++(X64)创建了一个按钮应用程序。 问题是当我使用GetMessage时,我的程序在无限循环中运行。突然,我评论了GetMessage部分,我的按钮工作正常(我只有两个按钮,两个按钮在不同的按钮点击事件上显示不同的对话框) 我有两个问题: 首先,任何关于删除GetMessage的想法都解决了我的问题(据你所知,我使用了CreateDialogParam和DialogProc作为我的

我通过msdn了解了
GetMessage
DispatchMessage(&msg)函数。
我用Visual C++(X64)创建了一个按钮应用程序。
问题是当我使用
GetMessage
时,我的程序在无限循环中运行。突然,我评论了
GetMessage
部分,我的按钮工作正常(我只有两个按钮,两个按钮在不同的按钮点击事件上显示不同的对话框)

我有两个问题:

  • 首先,任何关于删除
    GetMessage
    的想法都解决了我的问题(据你所知,我使用了
    CreateDialogParam
    DialogProc
    作为我的按钮控件)

  • 其次,据我所知(如果我错了,请纠正我),
    GetMessage
    接收消息(如果一次有这么多消息),然后
    DispatchMessage(&msg)一个接一个地发送这些消息,让他们完成工作。如果第一条消息已完成,则发送第二条消息,依此类推,直到处理完所有消息

  • 我的代码如下:

    m_hwndPreview = CreateDialogParam( g_hInst,MAKEINTRESOURCE(IDD_MAINDIALOG), m_hwndParent,(DLGPROC)DialogProc, (LPARAM)this);
    if (m_hwndPreview == NULL)
    {
        hr = HRESULT_FROM_WIN32(GetLastError());
    }
    BOOL bRet;
    MSG  msg;
    while ( (bRet=GetMessage (& msg, 0, 0, 0)) != 0)
    {
        if (bRet == -1)
        {
            bRet = HRESULT_FROM_WIN32(GetLastError());
            MessageBox(NULL, L"Hurr  i am the error",L"Error", MB_ICONERROR | MB_OK);
        }
    
        else if (!IsDialogMessage (m_hwndPreview, & msg))
        {
            TranslateMessage ( & msg );
            DispatchMessage ( & msg );
            MessageBox(NULL, L"there is no error in receivung the message", L"Error", MB_ICONERROR | MB_OK);
        }
    } 
    int refMsg= (int)msg.wParam;
    refMsg;
    

    请显示相关代码。请查看并仔细检查您没有将窗口句柄传递给主消息循环中的
    GetMessage()
    。常见的错误。类似地,查找使其听起来像是一次检索所有消息,然后一个接一个地分派它们。这是不正确的。
    GetMessage
    DispatchMessage
    一次只能处理一条消息。@all。。。代码如上所述。