在MFC窗口中画图,如何使窗口最小化后图形不消失
时间: 2023-12-04 20:02:38 浏览: 46
在MFC窗口中绘制图形时,可以在窗口的`OnPaint()`函数中绘制。当窗口最小化后,`OnPaint()`函数不会再被调用,导致图形消失。
为了解决这个问题,可以通过在窗口类中添加一个成员变量来保存绘制的图形,然后在`OnPaint()`函数中判断窗口是否最小化,如果是则不绘制图形,否则绘制保存的图形。
具体实现步骤如下:
1. 在窗口类中添加一个成员变量来保存绘制的图形,例如:
```
class CMyWnd : public CWnd
{
private:
CBitmap m_bmp; // 保存绘制的图形
// ...
};
```
2. 在窗口的`OnPaint()`函数中判断窗口是否最小化,如果是则不绘制图形,否则绘制保存的图形,例如:
```
void CMyWnd::OnPaint()
{
CPaintDC dc(this);
if (!IsIconic()) // 判断窗口是否最小化
{
CDC memDC;
memDC.CreateCompatibleDC(&dc);
CBitmap* pOldBmp = memDC.SelectObject(&m_bmp);
dc.BitBlt(0, 0, m_bmp.GetBitmapDimension().cx, m_bmp.GetBitmapDimension().cy, &memDC, 0, 0, SRCCOPY);
memDC.SelectObject(pOldBmp);
}
}
```
3. 在绘制图形时,将绘制的结果保存到成员变量中,例如:
```
void CMyWnd::DrawShape()
{
CDC* pDC = GetDC();
CDC memDC;
memDC.CreateCompatibleDC(pDC);
m_bmp.CreateCompatibleBitmap(pDC, cx, cy);
CBitmap* pOldBmp = memDC.SelectObject(&m_bmp);
// 在 memDC 中绘制图形
// ...
memDC.SelectObject(pOldBmp);
ReleaseDC(pDC);
}
```
这样,在窗口最小化后,绘制的图形就不会消失了。