在调整C ++大小时,如何使用Window来保持绘制的对象

时间:2012-10-13 21:23:39

标签: c++ gdi

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

2 个答案:

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

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