我的程序在屏幕上创建随机的rectanges。每次单击鼠标左键时,会向窗口添加一个随机大小和颜色的新矩形。但是,当我调整窗口大小时,所有的rectanges都被删除了 - 我不希望这种情况发生。我不明白程序在调整大小时的作用,它是否调用WM_PAINT
案例?如果是这样,我需要包括什么来确保调整大小时当前窗口状态保持不变。
答案 0 :(得分:1)
每当收到WM_PAINT时,您需要保存状态并重绘。这只是微软决定的协议。因此,请确保将窗口状态保存在内存中。
在调整大小的情况下,您还会获得多个大小调整消息,首先是大小正在变化时的一系列WM_SIZING事件,然后是最终设置大小时的WM_SIZE。您将在其间获得WM_PAINT消息,并且您可以在任何或所有这些事件上重新绘制应用程序。
答案 1 :(得分:0)
请参阅我在这里使用GDI进行绘画的类似问题的答案。
https://stackoverflow.com/a/12764607/682404
基本上,当您调整窗口大小时,您应该从Windows收到WM_PAINT
消息。在消息处理程序中,您需要重新绘制表单。我联系的答案有关于绘画过程的一些细节。你的绘画代码看起来像这样粗鲁:
PAINTSTRUCT stPaintStruct;
HDC hPaintDC = BeginPaint(hWnd, &stPaintStruct);
if (hPaintDC != HANDLE_NULL)
{
// establish clipping rect using stPaintStruct.rcPaint
if (!m_bRendering)
{
m_bRendering = TRUE;
// Render() knows the how to create the output.
Render ();
m_bRendering = FALSE;
}
EndPaint (hWnd, &stPaintStruct);
return (TRUE);
}
每次需要绘制窗口时,总是需要从头开始绘制,因此需要存储矩形坐标。