これかな。


MSG msg;
while(true)
{
while(::PeekMessage(&msg, hWindowHandle, 0, 0, PM_REMOVE))
{
if(WM_QUIT == msg.message)
goto Exit;

::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
::Sleep(0);
}

Exit:


PeekMessage()、TranslateMessage()とDispatchMessage()が
1ループ1セットしか呼ばれないとかだと遅延が起こりまくるな。