我的程序中经常要用到下面的代码:
CDC* pDC=GetDC();
CDC frontDC;
frontDC.CreateCompatibleDC(pDC);为了使用方便,我把CDC frontDC;语句放在了头文件里,因为上面那段程序运行的时候很多,这样会经常执行CDC frontDC;我以为会影响速度的,没想到这么一做,编译是能通过,可是运行时候出错,请问这是为什么?
CDC* pDC=GetDC();
CDC frontDC;
frontDC.CreateCompatibleDC(pDC);为了使用方便,我把CDC frontDC;语句放在了头文件里,因为上面那段程序运行的时候很多,这样会经常执行CDC frontDC;我以为会影响速度的,没想到这么一做,编译是能通过,可是运行时候出错,请问这是为什么?
解决方案 »
- VC6怎么打开昨天编辑过的项目啊?
- PC机 单片机 双向通信问题
- c++菜鸟提问,关于char数组合并问题
- 如何得到 IDirectDrawColorControl对像指针
- 如何判断一个CWnd对象是否是CEdit?
- 把光标移到一个编辑框上,触发什么消息呢 ,在这个消息处理函数中我怎么知道点在了哪个编辑框上
- oldworm(oldworm)进来啊
- 请问WriteProcessMemory在WIN2K怎么不起作用?谢谢!
- 请问各位大侠:vc中如何让mdi生成的view不是凹陷的,而是和对话框窗口一样?先谢谢了
- 谁知道MIB
- 123.45不用转换为字符串的函数,怎么将5个数字分别取出来(能够将小数点前后的分别转成整数也行)。谢谢
- 内存不够!请问,CArray 数组的最大元素个数是多少?
放在了哪里?
cwnd::GetDC();
该函数的返回值可能是临时的不能被保存以供将来使用!
CDC* pDC=GetDC();
CDC frontDC;
frontDC.CreateCompatibleDC(pDC);
经常使用,说明frontDC是一个局部变量,
会不停的被改写,
而放到头文件里就完全不是这么回了,
同二楼,它的值根本就不是你所想要的了
public:
CDC frontDC;以后在使用的时候:.cpp文件
CDC* pDC=GetDC();
frontDC.CreateCompatibleDC(pDC);
有什么不对?
CDC frontDC;那frontDC为你的类的成员,
最好在构造函数里为其初始化.
同时,在类里它是一个全局的,
如果你多次调用就会有问题
第二:你将其声明为类的成员变量也无不可,除了有些画蛇添足之外,但是你Create了一个DC,有没有DeleteDC()呢?当它是局部成员变量的时候,每次调用离开有效范围,该对象自动销毁了,因此资源泄漏没有造成后果。
.h:HDC m_hDc ;
.cpp:m_hDc = GetDC()->GetSafeHdc() ;
附:GetDC()应该和ReleaseDC()配对使用,不然有资源泄漏
临时对象的成因,参见:
http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=193097