DispatchMessage is synchronous function.
下面是两个例子,用于说明为什么是同步的:给人异步的错觉,是因为唤起了一个新的消息循环
while (GetMessage (&msg, NULL, 0, 0))
{
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 (1);
break;
case WM_DESTROY:
PostQuitMessage (0);
break;
default:
return DefWindowProc (hWnd, message, wParam, lParam);
}
return 0;
}
//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 (0);
break;
default:
return DefWindowProc (hWnd, message, wParam, lParam);
}
return 0;
}