我正在尝试使用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
,但结果相同......
答案 0 :(得分:1)
break;
之前你错过了case WM_KEYDOWN:
。在收到的第一个WM_TIMER
上,你会掉下来并最终隐藏窗口,然后才有机会重新绘制。
case WM_TIMER:
switch (wParam)
{
case ID_Timer1:
{
timer++;
InvalidateRect(hWnd, NULL, FALSE);
UpdateWindow(hWnd);
break;
}
}
break; // <-- add this!