Win32 GDI 和计时器问题



我正在尝试使用 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!

最新更新