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

Visual C++ 2010开发权威指南-2 MFC应用程序框架(未完)

2014-09-13 16:58 239 查看
Visual C++ 2010开发权威指南-2 MFC应用程序框架(未完)
2.1 用MFC向导生成应用程序

2.1.1 生成的程序框架

CWinApp:应用程序类,负责初始化和运行应用程序;

CFrameWnd:框架类,负责显示和搜寻用户命令;

CDocument:文档类,负责装载和维护文档,文档可以是从文档到网络设备设置的任何内容;

CView:视图类,负责为文档提供一个或多个视图。

2.1.2 生成的应用程序类型

5种应用程序:控制台、基于对话框、基于单文档、基于多文档、基于HTML。

2)基于对话框的应用程序

特点:没有框架类、文档类或视图类。

结构:CWinApp->CWinDialog->WindowObjects

可以使用选项卡降低基于对话框的应用程序界面的拥挤程度。

3)单文档应用程序SDI

包含的类:从CWinApp派生的应用程序类,从CFrameWnd派生的框架类,从CDocument派生的文档类,从Cview派生的每个文档的一个或多个视图类。

通过把应用程序的基视图类选择为CHtmlView,可以把单文档应用程序转换为简单的Web浏览器。

缺点:同一时间只能打开一个文档,若要查看一篇文档,需要在查看前关闭当前打开的文档。

4)多文档应用程序MDI

包含的类:从CWinApp派生的应用程序类,从CMDIFrameWnd的框架类,从CMDIChildWnd派生的一个或多个子框架类,从CDocument派生的每个子框架一个文档类,从Cview派生的每个文档的一个或多个视图类。

Word和Excel都是多文档应用程序。

通过把应用程序的基视图类选择为CHtmlView,可以把多文档应用程序转换为简单的Web浏览器。

5)基于HTML的应用程序

2.1.3 向导生成工程文件简介

2.2 应用程序框架分析

1)CWinApp派生的CXxxApp类

任何MFC应用程序只有一个CWinApp对象,用于控制程序的初始化、程序的启动、主消息循环的运行、程序终止。

CWinApp类不仅代表程序运行的主线程,而且代表了应用程序本身,是应用程序开始后创建的第一个对象,也是结束前执行的最后一个对象。

启动后,应用程序类负责创建应用程序的其他对象。

CWinApp的主要成员函数:InitInstance(),Run(),ExitInstance()。

InitInstance()在生成一个新的实例的时候,完成初始化工作。

应用程序类的另一个主要功能:通过文档模板类CDocTemplate将框架窗口类、文档类、视图类与应用对象联系起来。文档模板类有两个派生类CSingleDocTemplate类和CMultiDocTemplate类。

2)CFrameWnd派生的CMainFrame类

框架类CFrameWnd是应用程序运行时创建的第二个对象,负责显示和监督用户对应用程序其余部分的操作,负责标题栏、菜单栏、工具栏、状态栏的生成。

多文档应用程序框架类为CMainFrame,每个打开的文档有一个子框架类,每个子框架类CChildFrm从CMDIChildWnd类派生。

3)CXxxView类和CXxxDoc类

视图类显示文档数据、接受用户输入、编辑,通过消息与主框架、文档对象互操作。

文档类存储数据,为视图类提供显示的数据来源。

4)其他用户界面类

空间窗口类、菜单类、对话框类、控制条类、属性类。

2.2.3 应用程序窗口

3种:重叠窗口(主窗口或框架窗口)、弹出窗口(对话框或消息框)、子窗口(控件、工作区等)。

每个窗口包含由系统绘制的“非客户区”和由应用程序绘制的“客户区”。

1)创建窗口

过程:首先创建类CWnd的一个实例,然后调用其一个成员函数,该成员函数调用API中的CreateWindow()函数,返回窗口句柄(指向窗口对象的非直接指针,即指向跟踪窗口对象地址的另一个指针),保存在CWnd的成员变量m_hWnd中。

创建窗口函数的具体使用参见该教材相应章节!

2)销毁窗口

2.2.4 消息机制与消息循环

注册窗口类、创建窗口、显示、更新窗口等初始化工作完成后,WinMain()进入消息循环。

Win32应用程序中采用消息循环机制(一系列的switch-case语句处理消息);MFC应用程序采用消息映射机制。

消息的种类:键盘消息、鼠标消息、窗口消息、焦点消息、定时器消息WM_TIMER、命令消息WM_COMMAND。

2.3 文档与视图

文档-视图体系结构将数据的管理和显示分离:文档对象用于容纳数据(管理),视图对象用来显示数据并对数据进行编辑(交互)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: