科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Visual C++.NET编程讲座之七

Visual C++.NET编程讲座之七

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本讲先来介绍MFC中的"一档多视"模式,然后讨论两种比较常用的单文档视图的切换方法

作者:Adding 来源:yesky 2007年11月16日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
使用CDocument类的AddView和RemoveView来切换

  在CDocument类中,AddView和RemoveView可以说是专门用于单文档视图的切换的,具体实现过程如下:

  (1) 在CMainFrame类添加两个变量,一个是CViewerView类指针对象m_pMainView,另一个是CWebView类指针对象m_pWebView。需要说明的是,用"添加成员变量向导"添加指针对象m_pMainView时,指定的类型名应是CViewerView*,注意后面的星号。m_pWebView添加时也类似。

  (2) 为CWebView类添加一个CString类成员变量strFileName。

  (3) 将CWebView::OnInitialUpdate中的语句" "删除。

  (4) 在CMainFrame类添加成员函数SwitchToView2,用于切换视图,其代码如图13所示。


图13 SwitchToView2函数代码

  (5) 将CMainFrame::OnViewText和OnViewHtml中的SwitchToView1函数调用改为SwitchToView2,其余不变。

  (6) 运行程序,结果如前图2所示。

  两种切换方法的比较

  SwitchToView1切换方法实质上是创建两个具有与文档相关联的视图,即视图创建时指定CCreateContext结构,具有很直接的"一档多视"的关系。而SwitchToView2方法是通过CDocument类的AddView和RemoveView来改变一个文档与多个视图的关联。

  由于SwitchToView1中创建的视图带有文档关联,因此可以直接在视图类中通过GetDocument()函数来获取相关联的文档指针,从而可以访问文档中的数据。而SwitchToView2中创建的视图本身不带文档关联,因此无法直接访问文档中的数据。

  由于SwitchToView2中需要在函数外指定视图类指针变量,因此在各个视图中可以通过AfxGeMainWnd()获取CMainFrame类指针,从而可以直接该问到CMainFrame类中定义的public视图类指针变量,这样便可在视图类之间直接访问。而SwitchToView1中的视图类指针变量是在函数内定义的,因此无法在各个视图类中进行视图之间的访问,并且在本例中CViewerView类对象被创建了两次。SwitchToView2中,CViewerView类对象只创建一次。

  除了上述两种方法外,还有一种方法,那就是使用静态切分机制来进行。由于它涉及过多的底层方法,对初学者而言,相对较难,因此这里不再给出。

  结束语

  在本讲中,我们重点讨论了视图类的添加、单文档的视图切换方法和技巧。对于初学者来说,学习并掌握这些技巧能对MFC的文档/视图机制有一个较为深入的了解。当然,MFC文档/视图机制本身是非常复杂的,在以后的学习中应慢慢地体会和理解。在最后一讲中,我们将重点应用程序的安装和部署。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章