把CDC设置作成局变量时出现程序崩溃
把CDC设置成全局变量时出现程序崩溃在写一个用于实现绘图功能的类的时候,为了省事,我把CDC *pDC设置成全局
把CDC设置成全局变量时出现程序崩溃 在写一个用于实现绘图功能的类的时候,为了省事,我把CDC *pDC设置成全局变量,然后在类调用之前把DC的指针传进去,这样做在在VC6.0的时候不会有问题,可是一到2005的时候程序就会崩溃。。。 但是现在现在把这个类用在VC6.0的另一个工程时时候也出现了这个错误,让我感觉头大,我想,是不是设置里有某个安全级别的选项可以避免这个错误。 文笔不好,怕讲不清楚,再用代码描述一下。
void CXXXX::SetDC(CDC *inDC) { pDC = inDC; } void CXXXX::DrawLine() { pDC->MoveTo(0,0); pDC->LineTo(100,100); }就是这样,pDC是全局变量,先调用SetDC传入指针,之后的绘制就可以不用把CDC作为输入参数了。
这种方法我最早是在VC6.0下用的,不过移植到VC2005的时候程序会崩溃。。。。。
然后这一次呢,是用在同一程序下的另一个工程里,也崩溃了,于是我想是不是工程的某个选项设置导致安全级别的检查所以报错呢。。。。
[解决办法] 如果类有 CS_OWNERDC 属性就可以 设为 全局变量 ,否则 临时DC 要 释放。
[解决办法] 引用: 自己顶一下吧。 各位有兴趣的朋友,可以试着在一个视图类里这样做。 声明一个CDC *m_pDC的成员变量。 在MouseDown消息响应中获得DC,m_pDC=GetDC();然后在MouseMove中用m_pDC绘图。 这在VC2005中会崩溃的。 你没看MSDN吧
CWnd::GetDC()
Identifies the device context for the CWnd client area if successful; otherwise, the return value is NULL. The pointer may be temporary and should not be stored for later use.
[解决办法] VC6.0不崩溃是不是没到你GetDC的生命周期结束呢?