0

我的程序在屏幕上创建随机矩形。每次单击鼠标左键时,窗口中都会添加一个随机大小和颜色的新矩形。但是,当我调整窗口大小时,所有矩形都被删除 - 我不希望这种情况发生。我不明白程序在调整大小时会做什么,是在调用案例WM_PAINT吗?如果是这样,我需要包括什么来确保在调整大小时保持当前窗口状态。

4

2 回答 2

1

每当收到 WM_PAINT 时,您都需要保存状态并重新绘制。这只是微软决定的协议。因此,请确保将窗口的状态保存在内存中。

在调整大小的情况下,您还会收到几条大小调整消息,首先是在大小发生变化时发生一系列 WM_SIZING 事件,然后是在最终设置大小时发生 WM_SIZE。您将在两者之间收到 WM_PAINT 消息,并且您可以根据任何或所有这些事件自由地重新绘制应用程序。

于 2012-10-13T21:30:02.943 回答
0

在此处查看我对使用 GDI 绘画的类似问题的回答。

https://stackoverflow.com/a/12764607/682404

基本上,当您调整窗口大小时,您应该会收到WM_PAINT来自 Windows 的消息。在您的消息处理程序中,您需要重新绘制表单。我链接的答案有一些关于绘画过程的细节。你的绘画代码看起来大概是这样的:

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);
}

每次需要绘制窗口时,总是需要从头开始绘制,因此需要将矩形的坐标存储在某处。

于 2012-10-13T21:27:32.277 回答