CMemDC memDC(pDC, &bitmap); memDC.CreateCompatibleDC(pDC); CBitmap* pOldBitmap = memDC.SelectObject(bitmap); memDC.SetStretchBltMode(COLORONCOLOR); image.StretchBlt(memDC.GetSafeHdc(), 0, 0, width, height, SRCCOPY); memDC.SelectObject(pOldBitmap); m_pictureCtrl.SetBitmap(bitmap.Detach()); m_nScalePercent = nScalePercent;如何修改
时间: 2024-02-28 08:54:59 浏览: 137
scale_bitmap.rar_CBitmap_CBitmap缩放_bitmap缩放_scale_缩放
很抱歉,我之前的回答有误。在这段代码中,应该将 memDC 的类型从 CDC 改为 CMemDC,以避免内存泄漏。同时,在创建 CMemDC 对象时,应该将 bitmap 对象传递给构造函数,而不是使用 SelectObject 方法。以下是修改后的代码:
```C++
CMemDC memDC(pDC, &bitmap);
memDC.SetStretchBltMode(COLORONCOLOR);
image.StretchBlt(memDC.GetSafeHdc(), 0, 0, width, height, SRCCOPY);
m_pictureCtrl.SetBitmap(bitmap.Detach());
m_nScalePercent = nScalePercent;
```
这里的 CMemDC 是一个自定义的类,可以用来管理 CDC 和位图对象的生命周期。你可以在代码中添加以下定义来使用它:
```C++
class CMemDC : public CDC
{
public:
CMemDC(CDC* pDC, CBitmap* pBitmap) : CDC()
{
ASSERT(pDC != NULL);
m_pDC = pDC;
m_pOldBitmap = m_pDC->SelectObject(pBitmap);
CreateCompatibleDC(pDC);
SetBkMode(TRANSPARENT);
}
~CMemDC()
{
if (m_pDC != NULL)
{
m_pDC->SelectObject(m_pOldBitmap);
}
}
private:
CDC* m_pDC;
CBitmap* m_pOldBitmap;
};
```
这样就可以安全地使用 CMemDC 来绘制位图了。
阅读全文