本人做了一个单文档界面的程序,自定义了一个新类CDlgBar(基于CDialogBar),映射了一个成员函数(当然也是在CDlgBar里头),在这个函数中需要调用CXXXDoc类里的某些变量。于是我在CDlgBar里定义了一个CXXXDoc对象,通过CDlgBar来调用这个变量。虽编译成功,但运行时出错。不知是不是CDialogBar类不能这样用,还是其他的什么原因?望高手指点迷津!
调试欢乐多
可以用AfxGetMainWnd()->GetActiveDocument()来得到程序的文档指针。
首先AfxGetMainWnd()返回CWnd*,而CWnd中无GetActiveDocument(),但他的继承类CMDIFrameWnd中有,所以须强制转换为CMainFrame(CMainFrame继承于CMDIFrameWnd)
我是这样调试的: CAaDoc* pDoc=(CAaDoc*)((CMainFrame*)AfxGetMainWnd())->GetActiveDocument();
pDoc->m_nVal=1;//m_nVal 为在CAaDoc中添加的共有变量调试中发现
第一句可以执行,但第二句报错 “违反权限”
跟踪发现第一句执行完后pDoc的值为NULL
最后在GetActiveDocument()中发现,当得不到活动视图时,返回NULL
所以,我分析,因为在弹出模态对话框时,无活动视图,所以GetActiveDocument()返回NULL,因而还是得不到文档指针最终我认为,因该在文档类中编写与对话框有关的代码,就不会出现上述问题,MSDN的示例程序也是这样处理的