C++在MFC的picture control中画图,如何使窗口大小改变后图形不消失
时间: 2024-02-23 14:59:32 浏览: 36
在 MFC 的图片控件中绘制图形时,可以在控件的`OnPaint()`函数中绘制。当窗口大小改变后,控件的大小可能会发生变化,导致图形消失。
为了解决这个问题,可以通过在控件类中添加一个成员变量来保存绘制的图形,然后在`OnPaint()`函数中绘制保存的图形,并根据控件的大小进行缩放。
具体实现步骤如下:
1. 在控件类中添加一个成员变量来保存绘制的图形,例如:
```
class CMyPictureCtrl : public CStatic
{
private:
CBitmap m_bmp; // 保存绘制的图形
// ...
};
```
2. 在控件的`OnPaint()`函数中绘制保存的图形,并根据控件的大小进行缩放,例如:
```
void CMyPictureCtrl::OnPaint()
{
CPaintDC dc(this);
CDC memDC;
memDC.CreateCompatibleDC(&dc);
CBitmap* pOldBmp = memDC.SelectObject(&m_bmp);
CRect rect;
GetClientRect(&rect);
dc.StretchBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, m_bmp.GetBitmapDimension().cx, m_bmp.GetBitmapDimension().cy, SRCCOPY);
memDC.SelectObject(pOldBmp);
}
```
3. 在绘制图形时,将绘制的结果保存到成员变量中,并根据控件的大小进行缩放,例如:
```
void CMyPictureCtrl::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);
Invalidate(); // 重绘控件
}
```
这样,在窗口大小改变后,绘制的图形就不会消失了,而且会根据控件的大小进行缩放。