void CMyWnd::DelayTime(float count) { int I = 0; AfxLockTempMaps(); SetTimer(2, count * 1000, NULL); for (;;) { MSG msg; VERIFY(::GetMessage(&msg, NULL, 0, 0)); switch (msg.message) { case WM_TIMER: { if (I == 1) { KillTimer(2); goto loop; } I ++; } break; case WM_MOUSEMOVE: case WM_LBUTTONDOWN: case WM_LBUTTONUP: case WM_RBUTTONDOWN: case WM_RBUTTONUP: case WM_CHAR: case WM_KEYDOWN: case WM_KILLFOCUS: break; default: DispatchMessage(&msg); break; } }loop: AfxUnlockTempMaps(FALSE); }
{
TRANSLATEMESSAGE();
DISPATCHMESSAGE()
}
MSG message;
while(::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
{
::TranslateMessage(&message);
::DispatchMessage(&message);
}可以的话,也可以把循环放在一个新的线程中运行。
{
int I = 0;
AfxLockTempMaps();
SetTimer(2, count * 1000, NULL);
for (;;)
{
MSG msg;
VERIFY(::GetMessage(&msg, NULL, 0, 0)); switch (msg.message)
{
case WM_TIMER:
{
if (I == 1)
{
KillTimer(2);
goto loop;
}
I ++;
}
break;
case WM_MOUSEMOVE:
case WM_LBUTTONDOWN:
case WM_LBUTTONUP:
case WM_RBUTTONDOWN:
case WM_RBUTTONUP:
case WM_CHAR:
case WM_KEYDOWN:
case WM_KILLFOCUS:
break; default:
DispatchMessage(&msg);
break;
}
}loop:
AfxUnlockTempMaps(FALSE);
}
在OnTimer(...)处理你要做的事不就可以了,
有必要的话可以加一些计数器或标志变量,
为何要用什么空循环呢?