MFC程序结构分析

合集下载

mfc mdi选项卡拆分逻辑

mfc mdi选项卡拆分逻辑

mfc mdi选项卡拆分逻辑MFC MDI选项卡拆分逻辑详解一、MFC的基本概念1. MFC的定义MFC(Microsoft Foundation Classes)是微软公司推出的一套C++类库,用于开发Windows应用程序。

2. MFC的组成MFC由一系列类组成,这些类封装了Windows API,并提供了许多便捷的方法和属性,使得Windows应用程序开发更加简单高效。

3. MFC的特点MFC具有高度封装性、可移植性、易学易用、功能强大等特点。

二、MDI的基本概念1. MDI的定义MDI(Multiple Document Interface)是指一个主窗口下可以打开多个子窗口,每个子窗口都可以显示不同的文档内容。

2. MDI的特点MDI具有多文档编辑功能,可以方便地管理多个文档,对于需要同时处理多个文件的应用程序非常有用。

三、选项卡控件介绍1. 选项卡控件的定义选项卡控件(Tab Control)是一种常见的界面控件,它通常被用来切换不同页面或显示不同内容。

2. 选项卡控件的特点选项卡控件具有直观明了、易于操作、美观大方等特点,在Windows 应用程序中被广泛使用。

四、MDI选项卡拆分逻辑详解1. MDI选项卡的基本概念MDI选项卡是指在MDI窗口中使用选项卡控件来管理多个子窗口,每个子窗口对应一个选项卡。

2. MDI选项卡的实现步骤(1)创建一个MDI父窗口。

(2)使用选项卡控件来管理子窗口,每个子窗口对应一个选项卡。

(3)在每个子窗口中添加一个标识符为“Tabbed”的菜单,并将其与相应的命令ID关联。

(4)在菜单处理函数中调用CMDIFrameWndEx类的EnableMDITabbedGroups方法,启用MDI选项卡功能。

(5)在创建子窗口时设置相应的样式和属性,以实现MDI选项卡效果。

3. MDI选项卡拆分逻辑详解(1)当打开多个文档时,可以将它们放置在同一个MDI父窗口下,并使用选项卡控件进行管理。

第6章 MFC基础

第6章  MFC基础
-4-
MFC概述—MFC应用程序分析
➢ 无WinMain()函数 ➢ 应用程序对象:必须利用应用程序类实例化一个全局对象 ➢ InitInstance()函数:派生类中重写,用于初始化应用程序 ➢ MFC窗体:利用MFC已有的窗体类派生或实例化
-5-
MFC概述—MFC应用程序开发方法
创建项目 创建/编辑资源
函数功能 在数组的最后添加一个数组元素,在必要时扩展数组 将另一个数组添加到此数组,在必要时扩展数组 将另一数组复制给此数组,在必要时扩展数组 设定数组指定位置处的值,在必要时扩展数组 获得一个指向数组元素的指针 释放不用的数组内存 获取数组内指定位置处的值 获取数组中包含的元素个数 获取允许访问数组元素的值的指针 获取数组的上边界的值 在数组的指定位置插入一个元素,后面的元素下标加1 删除指定位置处的值 删除数组中的所有元素 设定数组指定位置处的值,数组不增长 设置数组的的初始大小 重载数组下标操作符
...... END_MESSAGE_MAP
- 10 -
MFC应用程序框架—消息映射
➢ 普通窗口消息
窗口消息 WM_CHAR WM_CLOSE
消息映射宏 ON_WM_CHAR ON_M_CLOSE
默认处理函数
afx_msg void OnChar (UINT, UINT, UINT); afx_msg void OnClose();
afx_msg void OnMouseMove( UINT, CPoint);
- 11 -
MFC应用程序框架—消息映射
➢ 命令消息
//命令消息使用ON_COMMAND宏对其进行映射响应,格式如下: ON_COMMAND(命令ID,响应函数)
//响应函数的原型如下: afx_msg void memberFxn();

mfc 知识点总结

mfc 知识点总结

mfc 知识点总结MFC库的基本组成包括以下几个部分:1. CObject类:是所有MFC类的基类,提供了对象的基本功能,包括内存管理、类型信息、对象的打印和序列化等。

2. CWnd类:是窗口类的基类,封装了Windows窗口的创建、显示、消息处理等功能。

3. CFrameWnd类:是框架窗口类,派生自CWnd类,封装了应用程序的主窗口,提供了菜单、工具栏、状态栏等UI组件。

4. CDocument类和CView类:分别是文档类和视图类,用于管理应用程序中的文档和视图。

文档类负责文档的打开、保存、关闭等操作,视图类负责文档内容的显示和交互。

5. CWinApp类:是应用程序类的基类,封装了应用程序的初始化、消息循环、资源管理等功能。

MFC库提供了丰富的类和函数,用于处理Windows应用程序的各个方面,下面将对MFC的一些重要知识点进行总结。

1. 消息处理在MFC应用程序中,窗口的消息处理是至关重要的。

MFC提供了消息映射机制来进行消息处理。

通过DECLARE_MESSAGE_MAP宏和BEGIN_MESSAGE_MAP/END_MESSAGE_MAP 宏,在类中声明消息处理函数并将消息与处理函数进行映射。

例如:```cpp// 声明消息处理函数afx_msg void OnMouseMove(UINT nFlags, CPoint point);// 映射消息到处理函数BEGIN_MESSAGE_MAP(CMyWnd, CWnd)ON_WM_MOUSEMOVE()END_MESSAGE_MAP()```2. 对话框对话框是Windows应用程序中常用的界面元素,用于与用户进行交互。

MFC提供了CDialog类和CDialogEx类来封装对话框。

开发者可以使用资源编辑器创建对话框模板,然后通过类向导生成对话框类。

对话框类中可以处理控件的事件,并通过DoModal函数或Create函数来显示对话框。

C++课件:MFC编程基础

C++课件:MFC编程基础

2021/7/10
12
MFC的优点
1、MFC对于类、类的继承、封 装、多态性、类间关系和相互作 用等应用程序特性都有具体体现, 可以使开发者高效、轻松地建立 Windows应用程序,而不受设 备限制并且由事件进行驱动。
2021/7/10
13
2、MFC具有良好的通用性和 可移植性,它定义了应用程序 的轮廓,并提供了用户接口的 标准实现方法,程序员所要做 的工作就是通过VC所提供的各 种工具来完成这个工作。
(1)CStatic(2)CButton(3)CEdit
(4)CScrollBar(5)CSliderCtrl
(6)CListBox (7)CComboBoxl
(8)CBitmapButton (9)CAnimateCtrl
(10) CTreeCtrl(11)CListCtrl
2021/7/10
27
程序员可以使用这一框架创建
Windows应用程序。
同时:MFC的组织是以C++类层次形式组

起来的,几个高层类提供一般功能,
而低层类实现更具体的功能,每一个低
层类都是从高层类派生而来,因此继承
了2021高/7/1层0 类的功能。
2
所以:MFC是一种类的层次结构, 它提供了一个应用程序开发框架, 此框架称为文档/视图架构。
1、Windows消息函数 2、文件处理函数 3、网络函数 4、菜单函数 5、文本与字体函数 6、硬件与系统函数 7、控件和消息函数 8、位图、图标和光栅运算函数 9、绘图函数 10、打印函数 11、设备场景函数 12、进程和线程函数
2021/7/10
6
程序员如何去学习MFC
1、C++语言基础 2、Windows操作系统基础 3、面向对象程序观念的基础

基于MFC的应用程序框架分析幻灯片PPT

基于MFC的应用程序框架分析幻灯片PPT
由基类CDocument派生,文档类负责存放程序 数据并读取磁盘文件数据,或将磁盘文件数 据写入磁盘文件中。 比如在建立一个图形系统时,存储图形的数 据结构等都是放在文档类中的。
2、视图类
视图类是由CView类派生的,它负责显示文档 类的数据,可以显示在屏幕上,也可以输出 在打印机和其他设备上。在屏幕上,这个类 管理客户窗口。 例:在实现一个图形系统时,屏幕上显示、 打印机绘图的工作都是由视图类完成的。
基于MFC的应用程序框架分析幻 灯片PPT
本PPT课件仅供大家学习使用 请学习完及时删除处理 谢谢!
一、什么是MFC?
1、概述 微软基础类库(MFC:Microsoft Foundation Class)
是微软为Windows程序员提供的一个面向对象的 Windows编程接口,它大大简化了Windows编程工作。 使用MFC类库的好处是:首先,MFC提供了一个标准化 的结构,这样开发人员不必从头设计创建和管理一个 标准Windows应用程序所需的程序,而是“站在巨人 肩膀上”,从一个比较高的起点编程,故节省了大量 的时间;其次,它提供了大量的代码,指导用户编程 时实现某些技术和功能。 2、MFC类库的概念及组成 (1) 类库是一个可以在应用中使用的相互关联的C++类 的集合。
化.如果失败,则调用应用类的ExitInstance ()函数,转至5)。 4)调用应用类的Run()函数,其功能主要是 进行消息循环,
不断获取消息和处理消息。一直到用户关闭应用程序的窗口, 产生WM_QUIT消息,调用ExitInstance ()函数,准备退出。
5)进行应用程序的收尾工作,比如删除注册 的窗口类等。 6)返回。
CDrawView* pView=(CDrawView *)GetActiveView( ); 3、获得应用类对象的指针 例:CDrawApp* pWinApp=(CDrawApp*)AfxGetApp(); 4、从应用类对象中获得主框架类对象的指针

mfc程序实验报告

mfc程序实验报告

mfc程序实验报告篇一:MFC实验报告实验日期:2013 年05 月18 日一、实验目的1、熟悉Visual C++的基本操作。

2、基本了解基于对话框的windows 应用程序的编写过程。

3、对于Windows Socket编程建立初步概念。

二、实验要求1、应用Visual C++中MFC CSocket 类,实现网络数据传输。

2、仿照本实验步骤,制作实用的局域网一对一聊天程序。

三、实验原理设置加入连接的数目,通过更改IP 地址和端口号,成为不同的客户端,与服务器端连接,实现用户间的聊天功能。

1.程序整体框架:主程序监听一端口,等待客户接入;同时构造一个线程类,准备接管会话。

当一个Socket会话产生后,将这个会话交给线程处理,然后主程序继续监听。

2.客户端(Client)客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。

客户端不需要指定打开的端口,通常临时的、动态的分配一个端口。

3.服务器端(Server)服务器端,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。

4.用户图形界面用户图形界面方便程序与用户的交互,多个用户参加,完成会话功能,具体的设计要方便用户的使用,直观清晰,简洁明了,友好美观。

四、实验内容一个最简单的点对点聊天程序客户机/服务器模式是socket点对点网络程序典型的模式,以下这个实验就是实现一个简单的点对点通信的聊天程序。

它用到的方法也是面向连接TCP连接的套接字MFC典型方式。

其工作过程是:服务器首先启动,创建套接字后等待客户的连接;客户启动以后,创建套接字,然后和服务器建立连接;连接建立后,客户机和服务器可以通过建立的套接字连接进行信息通信。

MFC六大核心机制

MFC六大核心机制1.消息映射机制:MFC使用明确的消息映射机制来处理用户界面和系统事件。

应用程序通过重写消息映射函数来处理不同的消息事件,如鼠标点击、按键操作等。

消息映射机制使得开发者可以方便地响应和处理不同的用户交互动作。

2. 文档视图(Doc/View)体系:MFC采用了文档视图体系,将应用程序数据(文档)和用户界面(视图)分离。

文档表示应用程序的数据,视图代表用户界面,通过文档视图模式可以实现多视图的显示和操作。

开发者可以自定义文档类和视图类,通过它们来管理和展示数据。

3.对象序列化机制:对象序列化是指将对象的状态转换为可以存储或传输的格式,以便于在不同的环境中恢复对象的状态。

MFC提供了强大的对象序列化支持,可以方便地对应用程序的数据进行存储和加载。

开发者只需将需要序列化的成员变量标记为可序列化,并实现相关的序列化函数即可实现数据的持久化。

4.多线程支持:MFC提供了多线程支持,使得应用程序可以在多个线程中同时执行任务。

开发者可以使用MFC提供的线程类来创建和管理线程,并通过消息机制进行线程间的通信。

多线程支持有助于提高应用程序的性能和响应能力。

MFC的运行时类是一组用于封装常用功能的类,包括字符串操作、容器类、文件I/O等。

这些类提供了方便、高效的操作接口,减少了开发者对底层操作的依赖。

开发者可以直接使用MFC提供的运行时类来简化开发过程。

6.扩展性:MFC提供了丰富的扩展性机制,包括自定义控件、自定义对话框、自定义视图等。

开发者可以通过派生已有的MFC类来创建自定义的控件或界面,以满足特定的应用程序需求。

扩展性机制使得开发者可以充分发挥自己的创造力和想象力,实现更加个性化的应用程序。

总结:MFC六大核心机制为开发者提供了丰富的类和功能,使得开发Windows图形界面应用程序更加简单和高效。

通过消息映射机制、文档视图体系、对象序列化机制、多线程支持、运行时类和扩展性机制,开发者可以轻松地实现各种应用程序的需求,并提供更好的用户体验。

mfc工作原理

mfc工作原理MFC(Microsoft Foundation Classes)是微软公司开发的一套用于Windows操作系统的应用程序框架,它在C++语言的基础上封装了一些常用的图形用户界面(GUI)功能,简化了Windows应用程序的开发过程。

本文将围绕MFC的工作原理展开阐述。

MFC的工作原理主要包括以下几个方面:1. 类库结构:MFC是一个面向对象的类库,它由一系列C++类组成。

这些类封装了Windows API的功能,提供了一种更加便捷的方式来创建和管理Windows应用程序。

MFC的类库结构包含了一些基本的类,如CObject、CWnd和CFrameWnd等,以及一些用于界面设计的类,如CButton、CEdit和CListBox等。

2. 消息映射机制:在MFC中,窗口类派生自CWnd类,通过消息映射机制来处理用户输入、系统消息等事件。

当用户操作窗口时,例如点击按钮、拖动滚动条等,系统会生成相应的消息,MFC会将这些消息映射到窗口类的成员函数上进行处理。

开发者只需重载对应的成员函数,就可以实现自定义的响应逻辑。

3. 对话框和控件:MFC提供了对话框和控件的封装,使得开发者可以方便地创建和管理用户界面。

对话框是一个独立的窗口,可以包含各种控件,如按钮、文本框、列表框等。

开发者可以使用MFC 提供的类来创建和设置对话框及其控件,通过消息映射机制来处理用户操作。

4. 文档视图模型(Document-View模式):MFC采用了文档视图模型来处理应用程序的数据和界面显示。

开发者可以通过MFC提供的类来创建文档类和视图类,文档类用于管理应用程序的数据,视图类用于显示和编辑数据。

MFC会自动处理文档和视图之间的关联,使得数据的修改能够实时反映到界面上。

5. 消息循环:MFC应用程序在启动后会进入一个消息循环,不断地接收和处理消息。

消息循环负责分发消息,并将消息传递给对应的窗口类进行处理。

MFC提供了一个消息映射表,用于将消息和相应的处理函数关联起来。

VC++6[1].0入门【第三章、MFC编程概述】

第三章 MFC 应用程序概述第3章 MFC 应用程序概述Microsoft Windows 是微软公司推出的一个应用于微机上的具有图形用户界面的多任务和多窗口的操作系统。

Windows 应用程序也称为窗口应用程序,所有的窗口应用程序都有着相同的窗口风格和菜单结构,用户界面友好,方便用户操作。

本章从剖析窗口应用程序的基本结构入手,继而介绍使用MFC 类库开发的应用程序框架结构,并介绍窗口应用程序运行的核心机制-消息映射。

学习了本章,你将对MFC 应用程序框架结构和运行机制有个整体的了解,为后面进入窗口应用程序开发打下良好的基础。

3.1 窗口应用程序概述窗口应用程序的开发一般采用可视化的面向对象的开发,可选择的窗口应用程序开发语言有Visual C++、Visual Basic 、Visual Java 、Dephi 等等。

无论采用哪一种开发语言,首先要了解窗口应用程序的基本机制。

3.1.1 窗口编程基础窗口应用程序运行于Windows 操作系统,Windows操作系统是一个多任务操作系统,因此窗口应用程序的组成,支持技术,基本运行机制等与DOS 应用程序有着本质的区别。

在学习开发窗口应用程序之前,先要对窗口应用程序有一个概念上的了解。

1. 窗口窗口是应用程序与用户进行交互的界面,应用程序通过窗口传递信息给用户,同样用户通过窗口输入数据,发布命令给应用程序。

Windows 界面包含了丰富的标准用户界面元素,包括窗口、图标、菜单、滚动条、对话框、控件和消息框等。

用户使用这些界面元素可以方便的与应用程序进行交互,一个典型的窗口外观如图3-1所示。

垂直滚动条控制菜单栏标题栏菜单栏关闭按钮最小化按钮最大化按钮客户区VC++6简明教程图3-1 Windows应用程序窗口组成在Windows编程中,各种窗口、菜单、按钮、对话框及程序模块等Windows的规范部件是按“对象”来组织的。

为了提高开发窗口应用程序的效率,微软公司为用户提供了大量能创建上述标准元素的API函数和C++类,并且以Windows API函数库和C++类库的形式提供给用户,以充分满足构成应用程序操作界面的需要。

MFC基础知识概述

MFC基础知识概述MFC(Microsoft Foundation Classes)是微软公司开发的基于C++的类库,用于Windows操作系统下的图形用户界面(GUI)应用程序开发。

MFC是Windows的主要开发框架,提供了一系列的类和函数,可以用于创建窗口、控件、对话框、菜单等。

本文将对MFC的基础知识进行概述,包括MFC的结构、类层次结构、消息和事件处理、资源管理等内容。

一、MFC的结构MFC的结构主要由四个层次构成:应用程序对象、窗口对象、视图对象和文档对象。

应用程序对象继承自CWinApp类,用于创建和初始化应用程序的整个过程。

窗口对象继承自CWnd类,用于创建和管理窗口。

视图对象继承自CView类,用于显示和处理用户界面上的一部分,通常与窗口对象对应。

文档对象继承自CDocument类,用于管理应用程序中的数据。

二、MFC的类层次结构MFC提供了众多的类和函数,可以用于创建各种窗口、控件、对话框等。

类层次结构是指这些类的继承关系。

MFC的类层次结构非常庞大,以CObject类为基类,派生出众多的中间类,再由这些中间类派生出更具体的类。

例如,CObject派生出CWnd,CWnd派生出CFrameWnd,CFrameWnd派生出CView,CView派生出CScrollView和CFormView等。

通过这种类层次结构,可以方便地创建和管理各种类型的窗口和控件。

三、消息和事件处理在MFC中,消息是用于实现窗口和控件之间通信的机制。

当用户操作窗口或控件时,会产生消息,应用程序可以通过消息处理函数来处理这些消息。

MFC提供了一些宏,如DECLARE_MESSAGE_MAP和BEGIN_MESSAGE_MAP,可以简化消息处理函数的定义和注册。

消息处理函数需要通过ON_MESSAGE或ON_COMMAND宏来注册,以告诉MFC在何时何地调用该函数。

事件是消息的一个特殊形式,一般是指用户操作控件时触发的消息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MFC程序结构分析2008-11-08 16:39分类:VC\MFC字号:大中小1 Windows程序工作原理WINDOWS 程序设计是一种完全不同于传统的DOS 方式的程序设计方法,它是一种事件驱动方式的程序设计模式。

在程序提供给用户的界面中有许多可操作的可视对象。

用户从所有可能的操作中任意选择,被选择的操作会产生某些特定的事件,这些事件发生后的结果是向程序中的某些对象发出消息,然后这些对象调用相应的消息处理函数来完成特定的操作。

WINDOWS 应用程序最大的特点就是程序没有固定的流程,而只是针对某个事件的处理有特定的子流程,WINDOWS 应用程序就是由许多这样的子流程构成的。

从上面的讨论中可以看出,WINDOWS 应用程序在本质上是面向对象的。

程序提供给用户界面的可视对象在程序的内部一般也是一个对象,用户对可视对象的操作通过事件驱动模式触发相应对象的可用方法。

程序的运行过程就是用户的外部操作不断产生事件,这些事件又被相应的对象处理的过程。

下面是WINDOWS 程序工作原理的示意图。

2 建立应用程序在介绍AppWizard 的时候,我们已经建立了一个名字为TEST 的工程,事实上这个框架程序已经可以编译运行了。

在BUILD 菜单中选择REBUILD ALL 菜单项,系统开始编译由APPWIZARD 自动生成的程序框架中所有文件中的源代码,并且链接生成可执行的应用程序。

在BUILD 菜单中选择EXECUTE 菜单项,应用程序就开始开始运行了,虽然我们没有编写一行代码,但是可以看出由系统自动生成的应用程序的界面已经有了一个标准WINDOWS应用程序所需的几个组成部分,我们要做的事情是往这个应用程序添加必要的代码以完成我们所需要的功能。

接下来将要对WINDOWS 自动生成的这个应用程序框架作详细的介绍,让你对MFC 方式的WINDOWS 应用程序的工作原理有全面的认识,只有这样你才会知道应该如何往程序框架当中添加需要的代码。

3 程序结构剖析为了让您对MFC 方式的程序的框架有一个总体的认识,这里设计了一个表示程序中的主要类之间的关系的图表:这个图表表示了使用MFC 方式的应用程序的四个主要类之间的关系,从中可以看出,CMYAPP 类主要的作用是用来处理消息的,它统一管理程序收到的所有的消息,然后把消息分配到相应的对象。

CMAINFRAME 是CMYVIEW 的父类,也就是说视窗VIEW 显示在主框窗MAINFRAME 的客户区中。

类CMYVIEW 的作用是显示数据,而数据的来源是类CMYDOC,在MFC 程序中,程序的数据是放在文档当中的,而显示数据则是利用视窗方式,文档与视窗分离带来的好处就是一个文档可以同时具有多个视窗,每个视窗只显示文档中的一部分数据,或者以特定的风格显示文档中的数据。

文档与视窗分离的另一个好处就是在程序中可以处理多个文档,通过对不同的视窗的处理达到对不同的文档分别处理的目的。

使用过传统的WINDOWS 编程方法的人都知道,在应用程序中有一个重要的函数WINMAIN(),这个函数是应用程序的基础,用户的操作所产生的消息正是经过这个函数的处理派送到对应的对象中进行处理。

在MFC 方式的WINDOWS 应用程序中,用来处理消息的是系统自动生成的MFC 中的类CWINAPP 的派生类CMYAPP,下面就从这个类开始介绍应用程序的框架。

3.1 类CMYAPP类CMYAPP 是应用程序运行的基础,注意这一行代码,可以看出这个类是由MFC 中的类CWINAPP 派生来的。

在这个类中除了有一般类都有的构造函数,一个重要的成员函数就是INITINSTANCE,我们知道,在WINDOWS 环境下面可以运行同一程序的多个实例,函数INITINSTANCE 的作用就是在生成的一个新的实例的时候,完成一些初始化的工作。

注意这一行代码,它的作用就是生成一个CMYAPP 类型的对象,生成的时候系统会主动调用INITINSTANCE 函数完成一些必要的初始化工作。

下面研究INITINSTANCE 函数所做的事情,注意这一行代码,它定义了一个文档模板对象指针PDOCTEMPLATE,通过NEW 操作符,系统动态生成了这个文档模板对象,然后使用ADDDOCTEMPLATE 函数把这个文档模板对象加入到应用程序所维护的文档模板链表当中,这个文档模板PDOCTEMPLATE 的作用就是把程序用到的框架窗口,CMAINFRAME,文档CMYDOC,视窗CMYVIEW 与应用对象CMYAPP 联系起来。

CMYAPP 类提供了用户与WINDOWS 应用程序之间进行交流的界面。

在生成这个类的对象后,这个对象自动地把自身与WINDOWS 系统建立联系,接收WINDOWS 传送的消息,并交给程序中相应的对象去处理,这就免去了程序员许多的工作,使得开发C++的WINDOWS 程序变得简单方便。

3.2 类CMAINFRAME类CMAINFRAME 是由MFC 中的CFRAMEWND 派生来的,所以它也是一个框架窗口。

前面已经指出,CMAINFRAME 是类CMYVIEW 的父类,也就是说CMYVIEW 类的对象显示在主框架窗口的客户区中。

在类CMAINFRAME 中,系统已经从类CFRAMEWND 那里继承了处理窗口的一般事件的WINDOWS 消息,比如改变窗口的大小,窗口最小化等等的成员函数,因此编程的时候程序员不需要再关心此类消息的处理,从而减轻了程序员的负担。

当然,如果确实需要重新编写处理此类消息的成员函数,则需要对原有的成员函数进行重载。

在MFC 程序中,我们并不需要经常对CMAINFRAME 类进行操作,更多的是对视窗类进行操作,达到对程序中的数据进行编辑和修改的目的。

最后要指出的是,在MFC 方式的程序中,当程序的一个实例被运行的时候,系统根据前面在CMYAPP 类中介绍的文档模板对象自动生成类CMAINFRAME,CMYVIEW,CMYDOC 的对象,而不需要程序员主动地去创建这些类的对象。

3.3 类CMyView 与CMyDoc之所以把CMyView 类和CMyDoc 类一起介绍是因为这两个类是密切相关的,下面的框图可以说明文档与视窗的关系。

在这个框图当中,文档是由文档模板对象生成的,并由应用程序对象管理,而用户则是通过与文档相联系的视窗对象来存储、管理应用程序的数据,用户与文档之间的交互则是通过与文档相关联的视窗对象来进行的。

生成一个新的文档的时候,MFC 程序同时生成一个框架窗口,并且在框架窗口的客户区中生成一个视窗对象作为框架窗口的子窗口,这个子窗口以可视化的方式表现文档中的内容。

视窗的重要功能就是负责处理用户的鼠标、键盘等操作,通过对视窗对象的处理达到处理文档对象的目的。

要指出的一点是,WINDOWS 应用程序分单文档界面SDI 和多文档界面MDI 两种,在单文档界面中,文档窗口与主框架窗口是同一概念。

而这时的视窗对象则是显示在文档窗口的客户区当中。

我们先前生成的TEST 程序使用的就是单文档界面方式,此时文档窗口是主框架窗口,即类CMAINFRAME 的对象。

下面将以一个例子来说明这两个类之间的关系。

前面已经提到,文档类是用来存放程序中的数据的,所以我们首先在文档类CMyDoc 中加入一个成员变量用来存放数据。

在左边的工作区用右键单击CMyDoc 选项,在弹出的菜单中选中Add member variable菜单项。

系统弹出Add Member Variable 对话框。

Variable Type 一栏用来输入成员变量的类型。

这里设置为CString,即字符串类型,Variable Declaration 一栏用来输入变量的名字,这里不妨输入为mystring,Access 组合框用来设置成员变量的访问权限,缺省为Public,设好后单击OK 按钮关闭对话框。

如下图这时,如果打开类CMyDoc 的头文件、可以发现其中已经自动加入了我们定义的公有变量mystring。

这个变量就可以作为我们的文档类的数据存储空间,因为mystring 是公有成员,它就可以被文档对应的视窗所处理了。

在VIEW 菜单中选择ClassWizard 菜单项,系统打开MFC ClassWizard 对话框,接下来我们要为视窗类添加处理键盘事件的成员函数。

在Classname 一栏中选中类CMyView,然后在messages 一栏中选中消息wm_char,单击add function 按钮,系统就自动往CMyView类中添加了处理wm_char 消息的成员函数的框架。

单击edit code 按钮,接下来对OnChar这个成员函数进行编辑和修改。

可以看出系统已经自动在这个成员函数中添加了CMyView 的基类CView 的WM_CHAR 消息的处理函数。

注意这一行代码:BEGIN_MESSAGE_MAP(CMyView, CView)//{{AFX_MSG_MAP(CMyView)ON_WM_CHAR()ON_WM_LBUTTONDOWN()ON_WM_CANCELMODE()//}}AFX_MSG_MAP// Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW,CView::OnFilePrintPreview)END_MESSAGE_MAP()它被放在mfc 的消息映射宏BEGIN_MESSAGE_MAP 中,它的作用就是把windows 系统发来的WM_CHAR 消息连接到CMyView 类的成员函数OnChar 上,即把这个成员函数作为处理WM_CHAR 消息的过程。

接下来我们就往这个成员函数中添加处理WM_CHAR 消息的具体代码。

首先在OnChar 函数中添加如下的代码:void CMyView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags){// TODO: Add your message handler code here and/or call defaultCMyDoc * pdoc;pdoc=GetDocument();}这段代码的作用是首先定义一个指向文档类对象的指针pdoc,然后利用CMyView 类的成员函数getdocument()获取指向当前视窗类所对应的文档类对象的指针,并把这个指针赋给定义的文档类型指针pdoc,这样我们在后面就可以用“pdoc_>mystring”的方式访问文档类中定义的公有数据成员mystring 了。

相关文档
最新文档