在线用户    站点地图 技术论坛 文档中心 站点导航 资源下载 语言参考 教程专题 站点统计 业务项目 使用帮助
您的位置
MSDN参考新加了CSS2参考,全中文,制作精良。245k下载。           新加了sxf_sxf推荐的"动态网页专家指导" 下载!          新加了lsg2002lsg推荐的"ASP.NET高级编程(PDF)" 下载!          新加了DHTML代码预览!!,功能强大哦!欢迎试用          新加了网友lincong为大家提供的SQL Server 2000 程序员指南,有点大,但同时也就说明内容全咯!           新加了网友ibra为大家提供的北大的JAVA课件,很适合初学者入门           新加了一个java的连接缓冲池代码示例           新加了人月神话电子版下载!软件工程巨著哦~~           更新了评分标准,引入了“专家分”概念,相信可以更好的激励大家的学习!详情请看“使用帮助”           新加了由网友GGG提供的“IIS超级管理手册”,值得一看哦!(虽然我没看过 :P )           新加了“英雄榜”,欢迎测试!           “无组件上传·从原理剖析到实践”已经全部完成,源码全部开放,有兴趣的朋友请到文档中心一探究竟。  您的位置  首页>文档中心>C++>文档A0000972 在同一窗口中打开页面中的链接 在新窗口中打开页面中的链接 将ASPCHINA设为首页 将ASPCHINA加入书签    
 LOGIN HERE
用户:
密码: 忘记密码
记住密码 用户注册 游客进入
相关文章

让左键弹出菜单响应自动更新

如何在 Visual C++.NET 2003 下编译eMule
发表文章
DIY文档视图

作者:happiness     提交人:happiness     发布时间:10-09-14     文章类型:原创     浏览量:2797
参考链结:http://    
关键字:MFC|文档视图
[本文档没有附件]
字体:    视力保护色: 杏仁黄  秋叶褐  胭脂红  芥末绿  天蓝  雪青  灰  银河白(默认色) [A0000972]

用过MFC文档视图框架的人都知道,只要做好了框架类、文档类、视图类和资源,在应用程序初始化时,加入多文档模板,这三个类和资源就能自动关联起来,确实给用户带来了很多方便。但在这种方式下,视图框架类的父窗口总是主框架,且新建,打开,加入窗口列表,增加窗口标题等都是由文档模板自动完成的,用户并不一定想使用这些功能(如自己的数据并不一定是从文件中获得的,而又想用文档类来管理数据),那如何做呢?通过跟踪研究,发现了一种简便方法,不但可以顺利的关联起动这三个类,还能以任何窗口做为父窗口,请看以下代码:
首先:
做好你的框架类,如:CMyFrame,继承于CFrameWnd
做好你的文档类,如:CMyDoc,继承于CDocument
做好你的视图类,如:CMyView,继承于CScrollView
BOOL CMainFrame::OpenMyView(CWnd* pParent)
{
  CMyFrame* pFrame = (CMyFrame*)RUNTIME_CLASS(CMyFrame)->CreateObject();
  if (!pFrame->Create(AfxRegisterWndClass(CS_DBLCLKS, 0, ::GetSysColorBrush(COLOR_WINDOWFRAME), 0), NULL, WS_CHILD | WS_VISIBLE, rectDefault, pParent))
  {
    return FALSE;
  }
  CDocument* pDoc = (CDocument*)RUNTIME_CLASS(CMyDoc)->CreateObject();
  pDoc->m_bEmbedded = FALSE;
  pDoc->m_bAutoDelete = TRUE;
  CCreateContext context;
  context.m_pCurrentFrame = pFrame;
  context.m_pCurrentDoc = pDoc;
  context.m_pNewViewClass = RUNTIME_CLASS(CMyView);
  context.m_pNewDocTemplate = NULL;
  CView* pView = (CView*)pFrame->CreateView(&context);
  if (pView == NULL)
  {
    return FALSE;
  }
  pFrame->SetActiveView(pView);
  return TRUE;
}

这样,你的三个类就可以协调工作了。如果你想在MyFrame中加载你的工具栏或做其它工作,可以其WM_CREATE消息中完成。
在视图类中,可以这样得到你的文档类指针:
CMyDoc* CMyView::GetDocument()
{
  ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc)));
  return (CMyDoc*)m_pDocument;
}

在其它类中想得到文档类或视图类指针,可以这样:
CMyDoc* CMainFrame::GetMyDoc(CWnd* pParent)
{
  CMyFrame* pFrame = (CMyFrame*)pParent->GetWindow(GW_CHILD);//这只限于父窗口中只有MyFrame一个子窗口,如果有多个子窗口,可用循环比较类名的方法来获得
  CMyDoc* pDoc = (CMyDoc*)pFrame->GetActiveDocument();
  return pDoc;
}

CMyView* CMainFrame::GetMyView(CWnd* pParent)
{
  CMyFrame* pFrame = (CMyFrame*)pParent->GetWindow(GW_CHILD););//这只限于父窗口中只有MyFrame一个子窗口,如果有多个子窗口,可用循环比较类名的方法来获得
  CMyView* pView = (CMyView*)pFrame->GetActiveView();
  return pView;
}

是不很方便呀?这样就少了新建,打开,加入窗口列表,增加窗口标题等咱们并不一定需要的功能,且可任选父窗口,不需要初始化时加入文档列表,不需要专门为这类文档视图做一个资源。

关于这篇文章的评论 [注意:这里仅仅是给大家提供了一个发表对文章本身看法的地方,如果有疑问,请到论坛提出] 我要提问!
标题
内容
发言
*您尚未以注册用户身份登录,不能发表评论。这里登录
您的位置
  (c)2000-2018 Yup Studio, all rights reserved.  
82.03125