CreateCompatibleBitmap有时出错是咋回事
CreateCompatibleBitmap有时出错是怎么回事?
有时其它程序窗口开多了就出错,然后关闭一些程序(QQ、迅雷、一些网页)之后,又可以了。。。
郁闷坏了~
代码如下:
bool CMyDrawing::Init(HDC WinDC)
{
m_dcWinDC=WinDC;
m_dcMemoryDC = CreateCompatibleDC( m_dcWinDC );
if( m_dcMemoryDC == NULL )
return false;
m_hMemoryBitmap = CreateCompatibleBitmap(m_dcWinDC,m_iDrawWidth, m_iDrawHeight );
if( m_hMemoryBitmap == NULL )
return false;
……
}
m_iDrawWidth和m_iDrawHeight都挺小的,没有超过显示器分辨率。
程序基于对话框的MFC,WinDC是从CMyDlg类得到的。
并且,是在第二次执行上述函数的时候出错:
CMyDrawing mydrawing1, mydrawing2;
mydrawing1.Init(::GetDC(GetSafeHwnd())); // 这个是对的
mydrawing2.Init(::GetDC(GetSafeHwnd())); // 这个就错了
但又不是每次都出错,就像上面说的,感觉是程序窗口开多了会出错。
------解决方案--------------------
是挺郁闷的,你有没有监视过内存,资源?还有报什么错啊,贴出来看看
------解决方案--------------------
典型的GDI资源泄漏。GDI资源使用完后需要尽快销毁。
------解决方案--------------------
这个问题我遇到过。
那就是程序其他的地方GDI资源泄露,导致了你的CreateCompatibleBitmap错误.查查其他的地方吧,凡是创建GDI对象和GetDC()的地方都要查。
在winxp下我测试过,只有你的应用程序的GDI对象超过10000个的时候就会有你所说的问题。
在任务管理器里:菜单项如下: 查看-> 选择列 弹出的对话框里勾上GDI对象,在任务管理器里可以看到你的应用程序使用的GDI对象个数。
------解决方案--------------------
其他的程序的GDI使用过多也会影响你的程序的。
有时其它程序窗口开多了就出错,然后关闭一些程序(QQ、迅雷、一些网页)之后,又可以了。。。
郁闷坏了~
代码如下:
bool CMyDrawing::Init(HDC WinDC)
{
m_dcWinDC=WinDC;
m_dcMemoryDC = CreateCompatibleDC( m_dcWinDC );
if( m_dcMemoryDC == NULL )
return false;
m_hMemoryBitmap = CreateCompatibleBitmap(m_dcWinDC,m_iDrawWidth, m_iDrawHeight );
if( m_hMemoryBitmap == NULL )
return false;
……
}
m_iDrawWidth和m_iDrawHeight都挺小的,没有超过显示器分辨率。
程序基于对话框的MFC,WinDC是从CMyDlg类得到的。
并且,是在第二次执行上述函数的时候出错:
CMyDrawing mydrawing1, mydrawing2;
mydrawing1.Init(::GetDC(GetSafeHwnd())); // 这个是对的
mydrawing2.Init(::GetDC(GetSafeHwnd())); // 这个就错了
但又不是每次都出错,就像上面说的,感觉是程序窗口开多了会出错。
------解决方案--------------------
是挺郁闷的,你有没有监视过内存,资源?还有报什么错啊,贴出来看看
------解决方案--------------------
典型的GDI资源泄漏。GDI资源使用完后需要尽快销毁。
------解决方案--------------------
这个问题我遇到过。
那就是程序其他的地方GDI资源泄露,导致了你的CreateCompatibleBitmap错误.查查其他的地方吧,凡是创建GDI对象和GetDC()的地方都要查。
在winxp下我测试过,只有你的应用程序的GDI对象超过10000个的时候就会有你所说的问题。
在任务管理器里:菜单项如下: 查看-> 选择列 弹出的对话框里勾上GDI对象,在任务管理器里可以看到你的应用程序使用的GDI对象个数。
------解决方案--------------------
其他的程序的GDI使用过多也会影响你的程序的。