非SDI/MDI,
void   CWinApp::EnableModeless(BOOL   bEnable) 

#ifdef   _AFX_NO_OLE_SUPPORT 
UNUSED(bEnable); 
#endif //   no-op   if   main   window   is   NULL   or   not   a   CFrameWnd 
CWnd*   pMainWnd   =   AfxGetMainWnd(); 
if   (pMainWnd   ==   NULL   ||   !pMainWnd-> IsFrameWnd())//异常发生在这 .....................
return; #ifndef   _AFX_NO_OLE_SUPPORT 
//   check   if   notify   hook   installed 
ASSERT_KINDOF(CFrameWnd,   pMainWnd); 
CFrameWnd*   pFrameWnd   =   (CFrameWnd*)pMainWnd; 
if   (pFrameWnd-> m_pNotifyHook   !=   NULL) 
pFrameWnd-> m_pNotifyHook-> OnEnableModeless(bEnable); 
#endif 
}

解决方案 »

  1.   

    1)非SDI/MDI就是说你工程没有CDocument类,也就无法获取。
    2)如果你自己添加了CDocument类,那么你只需要模仿单文档中GetDocument()函数的实现,提供给外界接口。
    当然你要用自己定义的CDocument类,包含头文件是必须,不要忘了。
      

  2.   

    这时doc就是一个实例了,跟普通的成员变量一样自己声明,初始化,使用。
      

  3.   

    我的工程是对窗口进行分割后得到的多视图。
    在CMyDoc类响应消息 
    CMyDlg dlg;
    dlg.DoModal();
    然后程序就在这句话发生错误了
    if   (pMainWnd   ==   NULL   ||   !pMainWnd-> IsFrameWnd())//异常发生在这 
    在CMyDlg的OnPaint()函数中有写
    CMainFrame* pMainFrame = (CMainFrame*)(AfxGetApp()->m_pMainWnd);
    CMyDoc* pDoc = (CMyDoc*)pMainFrame->GetActiveDocument();