我正在尝试使用 DrawText
GDI 函数实现每奇数秒闪烁一次文本,但我在正确设置和运行计时器时遇到问题。
这是我的代码:
const int ID_Timer1 = 1;
SetTimer(hWnd, ID_Timer1, 1000, NULL);
...
LRESULT CALLBACK Splash::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) {
case WM_PAINT:
if((timer%2)==0)
m_pSplashWnd->OnPaint ( hWnd, true );
else
m_pSplashWnd->OnPaint ( hWnd, false);
break;
case WM_NCDESTROY:
delete m_pSplashWnd;
m_pSplashWnd = NULL;
break;
case WM_TIMER:
switch (wParam)
{
case ID_Timer1:
{
timer++;
InvalidateRect(hWnd, NULL, FALSE);
UpdateWindow(hWnd);
break;
}
}
case WM_KEYDOWN:
case WM_SYSKEYDOWN:
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
case WM_MBUTTONDOWN:
case WM_NCLBUTTONDOWN:
case WM_NCRBUTTONDOWN:
case WM_NCMBUTTONDOWN:
m_pSplashWnd->HideSplashScreen();
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
我做错了什么?我已经尝试使用专用TimerProc
而不是WM_TIMER
但结果相同......
您在case WM_KEYDOWN:
之前缺少一个break;
。 在收到的第一个WM_TIMER
时,您会跌倒并最终在窗户有机会重新粉刷之前将其隐藏起来。
case WM_TIMER:
switch (wParam)
{
case ID_Timer1:
{
timer++;
InvalidateRect(hWnd, NULL, FALSE);
UpdateWindow(hWnd);
break;
}
}
break; // <-- add this!