WM_PAINT基于按钮单击

问题描述 投票:1回答:1

我正在尝试编写一个窗口过程,只有在单击开始按钮时才会调用窗口中矩形的动画,并在单击停止按钮时停止。

我尝试这样做:

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)循环。

我的问题是如何使动画停止点击按钮成为可能?

c++ winapi wndproc
1个回答
2
投票

您的应用程序被挂起,因为您正在等待更改标志,并且无法更改。

WindowProcedure被召唤一个事件,直到你离开它,任何其他事件将不会被处理。

您需要做的是在计时器上执行动画步骤。您需要设置一个计时器,它会向您发送一个您必须处理的事件,并且您可以在那里绘制动画的下一帧。

© www.soinside.com 2019 - 2024. All rights reserved.