GetMessage
私は知り、DispatchMessage(&msg);
機能するためにmsdnを通過しました。Visual C++ (x64) を使用してボタン アプリケーションを作成しました。
問題はGetMessage
、プログラムを使用したときに無限ループに入っていたことです。突然、パーツとボタンが正常に機能していることにコメントしましたGetMessage
(2つのボタンがあり、2つのボタンだけが異なるボタンクリックイベントで異なるダイアログボックスを表示します)。
2 つの質問があります。
GetMessage
まず、解決した問題を削除する理由を考えてください(私が使用CreateDialogParam
した知識とDialogProc
ボタンコントロールのために)。第二に、私が理解しているように(間違っている場合は修正してください)、
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;