gpt4 book ai didi

c++ - 在 mfc 中调整(通过拖动)对话框窗口大小时,内存资源使用率上升

转载 作者:行者123 更新时间:2023-11-30 03:47:34 26 4
gpt4 key购买 nike

我遇到了一个问题,即在调整(通过拖动)对话框大小时内存资源使用率变得非常高。

我已经在对话框上创建了一个 View ,并在 View 中显示了 bmp 图像。但是,当我多次调整(通过拖动)对话框大小时,内存资源使用量增加得非常高。我不知道从哪里开始。我应该检查什么?

我的代码概念如下。

CTestView::OnDraw(CDC * pDC)
{
...
DodisplayImage();
...
}


Void CTestView::DodisplayImage(void)
{
if (m_pImage == NULL) { return; }
PixelPacket *pPixels;
CPoint pt;
CRect rectClient;
CDC * pDC;
pDC = GetDC();
GetClientRect(rectClient);
if (pDC != NULL) {
int nImageY;
int nImageX;
CSize sizeScaled; // Clear the background pDC->FillSolidRect(rectClient,pDC->GetBkColor());
...
BITMAPINFOHEADER bmi;
bmi.biSize = sizeof(BITMAPINFOHEADER); bmi.biWidth = m_pImage->columns();
bmi.biHeight = (-1)*m_pImage->rows(); bmi.biPlanes = 1; bmi.biBitCount = 32;
...
,,BitBlt (...);
DeleteObject(hMemDC);
}

我已经通过以下链接关注了 dodisplayimage()

ftp://ftp.mpe.mpg.de/pub/ImageMagick/ImageMagick-5.3.3/contrib/win32/MFC/NtMagick/NtMagickView.cpp

最佳答案

这里有漏洞:

Void CTestView::DodisplayImage()
{
CDC *pDC = GetDC();
pDC->FillSolidRect(rect, pDC->GetBkColor());
ReleaseDC(pDC); //<= needs cleanup
}
GetDC之后必须调用

ReleaseDC进行清理。另请参阅 GetDC() 的文档

或者您可以避免所有这些,因为 MFC 具有自动清理的类。将代码中的每个位置的 GetDC 替换为 CClientDC:

Void CTestView::DodisplayImage()
{
CClientDC dc(this)
dc.FillSolidRect(rect, dc.GetBkColor());
//do stuff with HDC hdc = dc.GetSafeHdc(); ...
//or CDC *pDC = &dc;
}

关于c++ - 在 mfc 中调整(通过拖动)对话框窗口大小时,内存资源使用率上升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33644212/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com