3

GetMessage私は知り、DispatchMessage(&msg);機能するためにmsdnを通過しました。Visual C++ (x64) を使用してボタン アプリケーションを作成しました。

問題はGetMessage、プログラムを使用したときに無限ループに入っていたことです。突然、パーツとボタンが正常に機能していることにコメントしましたGetMessage(2つのボタンがあり、2つのボタンだけが異なるボタンクリックイベントで異なるダイアログボックスを表示します)。

2 つの質問があります。

  1. GetMessageまず、解決した問題を削除する理由を考えてください(私が使用CreateDialogParamした知識とDialogProcボタンコントロールのために)。

  2. 第二に、私が理解しているように(間違っている場合は修正してください)、GetMessageメッセージを受信し(一度に非常に多くのメッセージがある場合)、その後、DispatchMessage(&msg);それらのメッセージを1つずつディスパッチして、作業を終了させます。最初のメッセージが終了すると、2 番目のメッセージがディスパッチされ、すべてのメッセージが処理されるまで続きます。

私のコードは以下の通りです:

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