CResourceException Warning: Uncaught exception in WindowProc (returning 0).

Warning: Uncaught exception in WindowProc (returning 0).
ElectronicFence.exe 中的 0x762ec42d 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0015f134 处的 CResourceException。
Warning: Uncaught exception in WindowProc (returning 0).
ElectronicFence.exe 中的 0x762ec42d 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0015f134 处的 CResourceException。
Warning: Uncaught exception in WindowProc (returning 0).

 GDI泄漏会弹出CResourceException异常,一个过程的GDI上线是10000,若是跨越这个值法度就会down掉。若是在视频处理惩罚函数存在gdi泄漏,会很轻易达到这个上限值。一个简单的办法可以断定gdi是否存在泄漏,就是应用Windows任务管理器中进程(【查看】-》【选择列】选上【GDI对象】)看里面的该过程的GDI对象是否一向在增长。


使用资源的对象和对象使用资源的方式。

1.使用资源的对象可分为两类 局部和全局
2.使用资源的方式也分为两类 拷贝和指针

结合你的代码,CreateCaret创建提示符 虽然没有明确使用资源的是什么对象 但是去MSDN上就可以知道了 实际上使用提示符的是CTextView这个窗口
,是一个全局的对象。但是它使用资源的方式却可以认为是指针式的 即它在使用bitmap作为提示符时 其实并没有把bitmap拷贝一份 而是“寄希望于”它一直存在。这样 当你的bitmap是局部变量的时候 它就找不到这个资源了 也就没法显示提示符了。

但是当CDC* pDC; 使用CBrush,CPen,CFont时,pDC所指向的CDC是全局的 但是它使用资源的方式可以认为是拷贝式的 也就是当我们建立一个CPen pen; 并执行pDC->SelectObject(&pen);后,实际上相当于将pen拷贝了一份给CDC。这样 就算是pen是局部变量 在以后的使用过程中也会保持pen所代表的画笔。

既然如此 我想如果使用资源的对象是局部的话,也很容易解释了,就不多说了。
我对这个方面没有更深的理解了,上面也只是我自己按照自己的想法说的,楼主要找更加确切的东西,再问问高人 或者到MSDN上去找几个资源使用的例子 自己总结一下。
另外去参考一下:http://dev.21tx.com/2004/02/14/17312.html
上面这个文章当中提到了一个CGdiObject类的“虚拟析构函数”不知道是不是因为跟这个虚拟构造函数有关系(可能是基类没有实现这个析构函数)
另外 GDI的很多麻烦在GDI+中有很多已经没有了。GDI+中很多以前GDI中需要清理内存的地方都没有了。 GDI+是GDI的升级 学习方向应该向GDI+偏移。

你可能感兴趣的:(VS2008,MFC,单文档结构)