簡體   English   中英

Win32-無法使用RedrawWindow()觸發WM_PAINT消息

[英]Win32 - cannot trigger WM_PAINT message with RedrawWindow()

我正在嘗試觸發WM_TIMER形式的WM_PAINT消息; 計時器可以工作,但是RedrawWindow()函數似乎沒有任何作用。 我究竟做錯了什么?

這是我的回調函數:

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    PAINTSTRUCT Ps;
    COLORREF    clrBlue = RGB(25, 55, 200);
    RECT        Recto = { 20, 28, 188, 128 };
    COLORREF    clrAqua = RGB(128, 255, 255);
    COLORREF clrRed  = RGB(255, 25, 5);
    static bool x = true;
    switch (message)
    {
    case WM_COMMAND:
        wmId    = LOWORD(wParam);
        wmEvent = HIWORD(wParam);
        // Parse the menu selections:
        switch (wmId)
        {
        case IDM_ABOUT:
            DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
            break;
        case IDM_EXIT:
            DestroyWindow(hWnd);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }

        break;
    case WM_TIMER:
        //InvalidateRect(hWnd ,NULL , FALSE);
        //RedrawWindow(hWnd , NULL , NULL , RDW_INVALIDATE);
        RedrawWindow(hWnd,NULL,NULL,RDW_INTERNALPAINT);
        break;
    case WM_PAINT:
        if(x)
        {
            hdc = BeginPaint(hWnd, &ps);
            SetTextColor(hdc, clrRed);
            TextOut(hdc, 50, 42, L"Some text", 13);
            EndPaint(hWnd, &ps);
            toggle(x);
        }
        else
        {
            hdc = BeginPaint(hWnd, &ps);
            SetTextColor(hdc, clrRed);
            TextOut(hdc, 50, 42, L"Another text", 13);
            EndPaint(hWnd, &ps);
            toggle(x);
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);

        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

由於x在您的函數中定義為局部變量,因此在調用函數時,它始終會獲得true值。 也就是說, WM_PAINT的代碼永遠不會到達ifelse分支。

例如,嘗試將x的定義更改為static bool x = true; 來完成切換工作。

另外,您需要使窗口的內容無效以使其重繪:

RedrawWindow(hWnd,NULL,NULL,RDW_INVALIDATE | RDW_INTERNALPAINT);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM