非SDI/MDI,CDialog类怎么获取CDoc类的指针

Liekkas 2011-10-23 10:09:50
非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
}
...全文
142 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Liekkas 2011-10-24
  • 打赏
  • 举报
回复
我的工程是对窗口进行分割后得到的多视图。
在CMyDoc类响应消息
CMyDlg dlg;
dlg.DoModal();
然后程序就在这句话发生错误了
if (pMainWnd == NULL || !pMainWnd-> IsFrameWnd())//异常发生在这


在CMyDlg的OnPaint()函数中有写
CMainFrame* pMainFrame = (CMainFrame*)(AfxGetApp()->m_pMainWnd);
CMyDoc* pDoc = (CMyDoc*)pMainFrame->GetActiveDocument();
Liekkas 2011-10-24
  • 打赏
  • 举报
回复
用户 昵称 2011-10-24
  • 打赏
  • 举报
回复
这时doc就是一个实例了,跟普通的成员变量一样自己声明,初始化,使用。
Liekkas 2011-10-24
  • 打赏
  • 举报
回复
请叫我涛哥0-0 2011-10-24
  • 打赏
  • 举报
回复
1)非SDI/MDI就是说你工程没有CDocument类,也就无法获取。
2)如果你自己添加了CDocument类,那么你只需要模仿单文档中GetDocument()函数的实现,提供给外界接口。
当然你要用自己定义的CDocument类,包含头文件是必须,不要忘了。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧