您的位置:首页 > 编程语言 > C语言/C++

Visual C++6.0 程序设计从入门到精通(一) - MFC中生成类以及生成类相互获取的函数调用

2015-12-21 21:50 295 查看

1. MFC的由来及组成

AFX由Application Framework技术团队创建。该团队名为AFX小组,用以开发C++对象导向工具给Windows应用程序开发人员使用。其实质是对Windows SDK的函数进行了类的封装,使之前面向C流程的过程式程序设计转变为面向对象的程序设计,用以提高程序的开发效率。

在封装的过程中,大部分Windows SDK API被封装进了类中,因此,MFC主要分为两部分:

MFC基类:与用户的界面资源相对应,面向对象的思想封装了SDK API;

以Afx开头的函数,通常是全局函数,用以跟MFC基类交互,获取MFC类对象的指针,已进行相关的处理。

2. MFC类应用程序的类别

单文档程序;多文档程序;对话框程序(没有视图类、文档类和框架类)

3. MFC程序中生成的类的类别

应用程序类

MFC 应用程序的初始化,启动运行和结束都是由应用程序对象完成的,通常继承于CWinApp类;

三种应用程序中均存在。

应用框架类

框架窗口类对应应用程序的主窗口,不同的程序类别继承自不同的基类。

单文档程序:主窗口类(MainFrame)继承于CFrameWnd;

多文档程序:主窗口类(MainFrame)继承于CMDIFrameWnd;子窗口类(ChildFrame)派生于类 CMDIChildWnd

对话框程序:对话框类继承于CDialog类

文档类

文档类描述的是应用程序保存数据的文件,继承于CDocument类。

注意:

文档类在应用程序中没有直观的对应关系,但是,应该明白的一点就是 MFC 框架的一个特点就是文档视图结构。这里可以抽象一点地来理解,比如说在 Word 中打开了一个文件,其实,这个文件就是文档,而看到的只不过是这个文件的一个视图,所以说文档提供了应用程序显示的支持,但是真正看到的应用程序显示的则是一个视图。

文档类在对话框程序中不存在。但是可以通过控件的操作对文件进行操作

视图类

视图类是用来显示文档对象内容的,继承于CView类。

注意:在 Word 程序中所看到的界面就是一个视图,要修改、画图,首先操作的对象就是视图,而操作的结果保存在文档类对象中。

试图类在对话框程序中不存在。

4. 四种类之间的关系

应用程序类与框架类的关系

每个应用程序类通过框架类对象来向用户提供程序的功能;而框架类对象的客户区就是视图类,用户可以在客户区进行操作(客户区包括视图类对象区和菜单栏、工具栏)。用户对应用程序上的操作主要是对视图类(或者框架类的菜单栏和工具栏)的操作,用户也主要是通过客户区向应用程序或者操作系统做出反应。用户在客户区中的操作如果设计到了数据,那么数据将会被保存到文档类对象中。

应用程序类、文档模板、文档类对象之间的关系

每个应用程序类( CWinApp 的派生类)中都保留并维护了一份所有文档模板的指针列表,这是一个链表结构。在文档中可以调用 CDocument::GetDocTemplate 获得指向该文档模板的指针。

一个文档模板可以有多个文档,每个文档模板都保留并维护了一个所有对应文档的指针列表。

一个文档可以有多个视图,每一个文档都保留并维护一个所有相关视图的列表。

文档视图结构

MFC 的文档视图结构机制把数据同它的显示以及用户对数据的操作分离开来,所有对数据的修改由文档对象来完成,视图调用这个对象的方法来访问和更新数据。

5. 四种类对象之间的函数交互

在基于文档视图结构的 Windows 程序在不同的调用环境常常需要得到各种对象的指针,以实现对象间数据的交互。实现各对象之间的相互访问有如下几种方法:

• 全局函数 AfxGetApp 可以得到 CWinApp 应用类指针;

• AfxGetApp()->m_pMainWnd 为框架窗口指针;

• 在框架窗口中 CFrameWnd::GetActiveDocument 得到当前活动文档指针;

• 在框架窗口中 CFrameWnd::GetActiveView 得到当前活动视指针;

• 在视图中 CView::GetDocument 得到对应的文档指针;

• 在文档中 CDocument::GetFirstViewPosition, CDocument::GetNextView 用来遍历所有和

文档关联的视;

• 在文档中 CDocument::GetDocTemplate 得到文档模板指针;

• 在多文档界面中: CMDIFrameWnd::MDIGetActive 得到当前活动的 MDI 子窗口。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: