簡體   English   中英

WM_PAINT基於按鈕單擊

[英]WM_PAINT based on button click

我正在嘗試編寫一個僅在單擊開始按鈕時才在窗口中調用矩形動畫的窗口過程,而在單擊停止按鈕時才停止在窗口中動畫。

我嘗試這樣做:

LRESULT CALLBACK WindowProcedure(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
    case WM_COMMAND:
        switch (wParam)
        {
        case BUTTON_START:
            stopClicked = false;
            DestroyWindow(hStartButton);
            CreateStopButton(hWnd);
            Animate(hWnd);
            return 0;
        case BUTTON_STOP:
            stopClicked = true;
            DestroyWindow(hStopButton);
            CreateStartButton(hWnd);
            return 0;
        }
    case WM_CREATE:
        AddMenus(hWnd);
        CreateStartButton(hWnd);
        return 0;
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    default:
        return DefWindowProcW(hWnd, msg, wParam, lParam);
    }
    return 0;
}

Animate功能:

void Animate(HWND hWnd)
{
    HDC hdcWnd = GetDC(hWnd);

    while(!stopClicked)
    {
        //drawing code
    }
    ReleaseDC(hWnd, hdcWnd);
    DeleteDC(hdcWnd);
}

該程序由於不存在while(!stopClicked)循環while(!stopClicked)崩潰。

我的問題是如何使動畫在單擊按鈕時停止?

您的應用程序已掛起,因為您正在等待標志更改,因此無法更改。

在事件上調用WindowProcedure ,直到您離開它,其他任何事件都不會被處理。

您需要做的是在計時器上執行動畫步驟。 您需要設置一個計時器,該計時器將向您發送一個必須處理的事件,您可以在其中繪制動畫的下一幀。

暫無
暫無

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

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