gpt4 book ai didi

c++ - WM_PAINT 基于按钮点击

转载 作者:行者123 更新时间:2023-11-30 03:21:24 25 4
gpt4 key购买 nike

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

我试过这样做:

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

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

最佳答案

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

WindowProcedure 在事件上被调用,在您离开它之前,不会处理任何其他事件。

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

关于c++ - WM_PAINT 基于按钮点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52129042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com