科技行者

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

知识库

知识库 安全导航

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

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

  • 扫一扫
    分享文章到微信

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

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

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

关键字:

  • 评论
  • 分享微博
  • 分享邮件
最一般的切换方法

  对于单文档框架窗口中的多个视图的切换,我们先看看大多数Visual C++程序员普遍采用的一种方法。具体过程如下:

  (1) 打开Viewer项目的Menu资源IDR_MAINFRAME,在"视图"菜单中添加三个菜单项,一个是水平线(分隔符),一个是"普通文本(&G)",ID号设为ID_VIEW_TEXT,最后一个是"HTML浏览(&H)",ID号设为ID_VIEW_HTML。结果如图7所示。


图7 在"视图"中添加的菜单项

  (2) 视图切换的代码应该添加在CMainFrame类中。我们先在CMainFrame类添加一个切换函数SwitchToView1,代码如图8所示。


图8 SwitchToView1函数代码

  函数SwitchToView1用了一些底层的MFC调用,我们来看看其代码执行过程。

  如果主程序框架窗口一开始就激活CViewerView,即pOldView指向CViewerView,则当在程序中调用SwitchToView1(1)时,即参数nView为1,该函数中的第一行代码用来获得当前活动的视图,第二行代码是通过GetDlgItem获得标识为1的窗口指针,由于视图也是一个窗口,所以可以直接进行指针类型的强制转换。第一次调用时,标识为1的窗口指针是不存在的,因而这个视图指针就是NULL,从而执行if语句中的代码,该代码是通过CCreateContext来创建一个新的视图对象指针。

  CCreateContext是用来将框架窗口、文档和视图关联起来,在主程序创建框架窗口以及文档相关联的视图时,会自动使用CCreateContext类结构;该结构包含了指向文档、框架窗口和文档模板的指针,以及一个CRuntimeClass指针。该结构还包含一些成员变量指针,如m_pCurrentDoc是用来指定和新创建的视图相关联的文档指针。

  接下来的代码比较好理解,pOldView->SetDlgCtrID以及SetWindowLong均是用来为新旧视图窗口重新指定一个标识。需要说明的是,在MFC底层机制中,应用程序框架窗口中默认的文档窗口(视图)标识是使用预定义的AFX_IDW_PANE_FIRST。最后一行的RecalcLayout用来重新布置框架窗口中的所有对象,包括文档窗口和视图。

  当再一次调用SwitchToView1(1)时,由于上次SwitchToView1调用将CViewerView类指针与标识1建立联系,因而SwitchToView1中的if语句中的代码就不会被执行,从而避免了CViewerView类视图对象再一次被创建。这也是为什么要使用SetDlgCtrID语句的原因。

  (3) 在MainFrm.cpp文件的前面添加一些文件包含语句,如图9所示的加框部分。


图9 添加的包含文件语句
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

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

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