WM_PAINT基于按钮单击

时间:2018-09-01 14:26:13

标签: c++ winapi wndproc

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

我试图这样做:

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

我的问题是如何使动画在单击按钮时停止?

1 个答案:

答案 0 :(得分:2)

您的应用程序已挂起,因为您正在等待标志更改,因此它不可能更改。

在事件上调用

WindowProcedure,直到您离开它,其他任何事件都不会被处理。

您需要做的是在计时器上执行动画步骤。 您需要设置一个计时器,该计时器将向您发送一个事件,您必须处理该事件,然后在此处绘制动画的下一帧。