使用GetMessage()函数

时间:2013-08-07 18:22:06

标签: c++ windows winapi visual-c++ user-interface

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

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

我有两个问题:

  1. 首先,删除GetMessage的任何想法都解决了我的问题(据我所知,我使用了CreateDialogParamDialogProc作为我的按钮控件。)

  2. 其次,据我所知(如果我错了请纠正我),GetMessage会收到消息(如果一次有这么多消息),之后DispatchMessage(&msg);会发送这些消息一个接一个让他们完成工作。如果第一个完成,则调度第二个消息,依此类推,直到所有消息都被处理完毕。

  3. 我的代码如下:

    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;
    

0 个答案:

没有答案