GDI 绘图丢失

灿烂李 2008-09-25 06:12:23
做一个 安防监控的电子地图程序
在窗体上绘图 加载图像用的是类是 ATL::CImage
绘图用的CDC
发现 绘图窗体 创建销毁 7次后 便绘不出图来了
7次后 1:1的比例不能绘制,看Image和CDC 都有效 缩小的比例可以
到第8次,什么比例都没有图像显示了
而且VC++的Watch窗口也变的被刷没了,就是看不到容 一个暗灰色的白框效果

这有可能是什么原因造成的? 难道是绘图环境被损坏了?
...全文
93 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
灿烂李 2008-09-26
  • 打赏
  • 举报
回复
解决了 确实是资源泄漏
m_memBmp.Detach();
m_preBmp.Detach();
m_memBmp.DeleteObject();
m_preBmp.DeleteObject();

先后顺序 导致的 先 m_preBmp.Detach(); 导致 m_memBmp.DeleteObject(); 返回失败 实际没有被释放
但 查看程序 句柄没有增加 谢谢大家了
梧桐168 2008-09-26
  • 打赏
  • 举报
回复
分析代码之前,可以用工具(Bear等)检测以下是否有资源泄露
灿烂李 2008-09-25
  • 打赏
  • 举报
回复
这是构造函数
CMemoryDC::CMemoryDC(CWnd *pWnd, BOOL bAirscape)
{
m_pClientDC = new CClientDC(pWnd);
m_pWnd = pWnd;
m_pWnd->GetClientRect(&m_clientRc);
if (bAirscape)
{
m_iWidth = m_clientRc.Width();
m_iHeight = m_clientRc.Height();
}
else
{
m_iWidth = ::GetSystemMetrics(SM_CXSCREEN);
m_iHeight = ::GetSystemMetrics(SM_CYSCREEN);
}
m_memDC.CreateCompatibleDC(m_pClientDC);
m_memBmp.CreateCompatibleBitmap(m_pClientDC, m_iWidth, m_iHeight);
m_memDC.SelectObject(&m_memBmp);
m_preDC.CreateCompatibleDC(m_pClientDC);
m_preBmp.CreateCompatibleBitmap(m_pClientDC, m_iWidth, m_iHeight);
m_preDC.SelectObject(&m_preBmp);
::SetStretchBltMode(m_memDC.m_hDC, HALFTONE);// 提高缩放后图像质量
::SetStretchBltMode(m_preDC.m_hDC, HALFTONE);
m_rectImage.SetRect(0, 0, m_iWidth, m_iHeight);
}
灿烂李 2008-09-25
  • 打赏
  • 举报
回复
我调用的是m_pclientdc= GetClientDC(wnd)
在delete m_pclientdc
xsc2001 2008-09-25
  • 打赏
  • 举报
回复
你是不是在调用CDC *pDC = GetDC();后没有释放pDC呀,应该调用ReleaseDC(pDC);释放pDC.如果不释放多次调用以后就会出现问题。
JacksonFox 2008-09-25
  • 打赏
  • 举报
回复
不知道了。。可能其他地方内存泄漏?
以前做过一次,开始的时候有内存泄漏,软件运行1天后,屏幕开始黑白,什么图片都没有。
灿烂李 2008-09-25
  • 打赏
  • 举报
回复
CMemoryDC::~CMemoryDC(void)
{
m_memBmp.Detach();
m_preBmp.Detach();
m_memBmp.DeleteObject();
m_preBmp.DeleteObject();
m_memDC.DeleteDC();
m_preDC.DeleteDC();
SAFE_DELETE(m_pClientDC)
}
这样释放的
JacksonFox 2008-09-25
  • 打赏
  • 举报
回复
内存的问题吧。。看看你重新创建前有没有销毁以前的。。要释放内存的。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧