社区
界面
帖子详情
GDI 绘图丢失
灿烂李
2008-09-25 06:12:23
做一个 安防监控的电子地图程序
在窗体上绘图 加载图像用的是类是 ATL::CImage
绘图用的CDC
发现 绘图窗体 创建销毁 7次后 便绘不出图来了
7次后 1:1的比例不能绘制,看Image和CDC 都有效 缩小的比例可以
到第8次,什么比例都没有图像显示了
而且VC++的Watch窗口也变的被刷没了,就是看不到容 一个暗灰色的白框效果
这有可能是什么原因造成的? 难道是绘图环境被损坏了?
...全文
93
8
打赏
收藏
GDI 绘图丢失
做一个 安防监控的电子地图程序 在窗体上绘图 加载图像用的是类是 ATL::CImage 绘图用的CDC 发现 绘图窗体 创建销毁 7次后 便绘不出图来了 7次后 1:1的比例不能绘制,看Image和CDC 都有效 缩小的比例可以 到第8次,什么比例都没有图像显示了 而且VC++的Watch窗口也变的被刷没了,就是看不到容 一个暗灰色的白框效果 这有可能是什么原因造成的? 难道是绘图环境被损坏了?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
内存的问题吧。。看看你重新创建前有没有销毁以前的。。要释放内存的。
雨滴桌面Rainmeter 4.3 正式版
您可以安全地在现有的 Rainmeter 4.2 或任何早期版本的基础上直接安装最新的 4.3 版本,并且您之前配置的任何设置都不会
丢失
或更改。永远都不需要卸载任何早期版本的 Rainmeter 来使用最新版本。 注意:Rainmeter ...
3天掌握Windows
GDI
+图形编程
GDI
是Graphics Device Interface的缩写,含义是图形设备接口,它的主要任务是负责系统与
绘图
程序之间的信息交换,处理所有Windows程序的图形输出。
GDI
的出现使程序员无需要关心硬件设备及设备驱动,就可以将应用...
《VC++.NET精彩百例》配套代码
38 模式对话框 实例 39 非模式对话框 实例 40 位图按钮 实例 41 对话栏编程 <br/>第4章 文件与系统编程 实例 42 鼠标
绘图
实例 43 键盘输入 实例 44 获取文件属性 实例 45 ...
C#
GDI
+
绘图
高级编程(包含滚动条后重绘)
理解
绘图
规则 一般来说,Windows的一个优点(实际上是现代操作系统的优点)是它可以让开发人员不考虑特定设备的细节。例如:不需要理解硬盘设备驱动程序,只需在相关的.NET类中调用合适的方法,就可以编程读写磁盘上...
界面
15,979
社区成员
115,896
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章