我正在尝试编写一个窗口过程,该过程仅在单击开始按钮时才调用窗口中的矩形动画,而在单击停止按钮时才停止。
我试图这样做:
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)
循环。
我的问题是如何使动画在单击按钮时停止?
答案 0 :(得分:2)
您的应用程序已挂起,因为您正在等待标志更改,因此它不可能更改。
在事件上调用 WindowProcedure
,直到您离开它,其他任何事件都不会被处理。
您需要做的是在计时器上执行动画步骤。 您需要设置一个计时器,该计时器将向您发送一个事件,您必须处理该事件,然后在此处绘制动画的下一帧。