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使用过多也会影响你的程序的。