各位大神,请教一个CreateCompatibleDC()的问题

mzdct 2010-01-30 09:28:38
因为要用加载PNG并且使用双缓冲,使用CreateCompatibleDC()创建内存DC。
然后就碰到了一个比较诡异的问题:程序开始运行良好,正常操作下页没有问题。但是,将程序最小化,安置在任务栏中,过了半小时左右再还原,就挂了。经过若干个半小时测试,发现是CreateCompatibleDC()的时候失败。我以为是程序刚还原的时候系统内存分配不够之类的,就用
while (!CreateCompatibleDC(pDC))
{
DWORD err = GetLastError();

}测试了一下,发现就在循环里面出不来了,而且err是0。
不知道大家有没有碰到过这个问题?注:此问题一定要将程序最小化一段时间后才会出现,最小化20分钟以内还原是不会有问题的。。。。
...全文
120 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
aptom 2010-01-30
  • 打赏
  • 举报
回复
我好像也遇到过类似的问题。
mzdct 2010-01-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 laviewpbt 的回复:]
deletedc
[/Quote]
有deleteDC。
另外,有没有方法让这个程序要挂就挂快点,不要最小化半小时才挂?这样调试起来太抓狂了。
mzdct 2010-01-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ryanwen 的回复:]
绘制完成后有调用DeleteDC?
[/Quote]
有,我是自己写了一个继承自CDC的类,在这个类的构造函数里面,用传进来的CDC创建内存DC,将图片绘制到内存DC中,然后在析构函数里面,将内存DC BitBilt到CDC中,然后将内存DC Delete掉。
Ryanwen 2010-01-30
  • 打赏
  • 举报
回复
绘制完成后有调用DeleteDC?
laviewpbt 2010-01-30
  • 打赏
  • 举报
回复
deletedc
mzdct 2010-01-30
  • 打赏
  • 举报
回复
对了,应该不存在内存泄露的问题。用BoundsCheck查过了,没漏。用任务管理器看,正常显示的时候,内存占用10M左右内存,最小化之后占用3M-4M,再还原还是10M左右,并不会越来越多。
mzdct 2010-01-30
  • 打赏
  • 举报
回复
修改一下,while循环里的代码应该是:
while (!CreateCompatibleDC(pDC))
{
DWORD err = GetLastError();
sleep(100);
}

19,468

社区成员

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

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