DispatchMessage is synchronous function.
下面是兩個例子,用于說明為什麼是同步的:給人異步的錯覺,是因為喚起了一個新的消息循環
while (GetMessage (&msg, NULL, , ))
{
if (! TranslateAccelerator (msg.hwnd, hAccelTable, &msg))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
}
//case 1:
LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
switch (message)
{
case WM_COMMAND:
break;
case WM_MOUSEMOVE:
//MessageBox organizes the message loop
MessageBox (NULL, "aa", "aa", MB_OK);
ExitProcess ();
break;
case WM_DESTROY:
PostQuitMessage ();
break;
default:
return DefWindowProc (hWnd, message, wParam, lParam);
}
return ;
}
//case 2:
LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
switch (message)
{
case WM_COMMAND:
break;
case WM_MOUSEMOVE:
Sleep (INFINITE);
DebugBreak ();
break;
case WM_DESTROY:
PostQuitMessage ();
break;
default:
return DefWindowProc (hWnd, message, wParam, lParam);
}
return ;
}