3

我已经通过 msdn 了解GetMessageDispatchMessage(&msg);发挥作用。我使用 Visual c++ (x64) 创建了一个按钮应用程序。

问题是当我使用GetMessage我的程序时进入无限循环。突然我评论了这GetMessage部分,我的按钮工作正常(我只有两个按钮,只有两个在不同的按钮单击事件上显示不同的对话框)。

我有两个问题:

  1. 首先,任何想法为什么要GetMessage解决我的问题(据您所知,我已经使用CreateDialogParamDialogProc我的按钮控件)。

  2. 其次,据我了解(如果我错了,请纠正我),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;
4

0 回答 0