1、第 6 章 MFC原理与方法,一个优秀的编程工具往往匹配一个功能强大的类库,类库封装了大量Windows编程需要使用的函数和数据结构。与Visual C+捆绑在一起的MFC(Microsoft Foundation Class)微软基础类就是这样一个由Microsoft公司设计的类库。采用MFC方式编程提高了Windows应用程序的开发效率,但由于MFC应用程序结构的复杂性和透明性,要想完全掌握MFC应用程序的内部机制需要付出很大的努力。 认识MFC只是一个过程、一个手段,最终目的是为了良好并熟练地运用MFC。,本章主要学习内容:Windows的编程机制MFC的基本原理和使用方法:MFC类MF
2、C应用程序框架MFC消息管理MFC宏常用的MFC类,6.1 Windows编程机制,Windows是一个多进程的图形窗口操作系统,Windows应用程序与DOS应用程序有很大的区别。DOS应用程序采用顺序执行过程,而Windows是一个基于事件的消息(Message)驱动系统。Windows应用程序是按照“事件消息处理”非顺序的机制运行。当有某个事件(如单击鼠标、键盘输入和执行菜单命令等)发生时,Windows会根据具体的事件产生对应的消息,并发送到指定应用程序的消息队列;应用程序从消息队列中取出消息,并根据不同的消息进行不同的处理。,所谓消息就是用于描述某个事件发生的信息,而事件是对于Win
3、dows的某种操作。事件和消息密切相关,事件是因,消息是果,事件产生消息,消息对应事件。所谓消息的响应,其实质就是事件的响应。消息驱动是Windows应用程序的核心,所有的外部响应(如键盘、鼠标和计时器等)都被Windows先拦截,转换成消息后再发送到应用程序中的目标对象,应用程序根据消息的具体内容进行处理。消息不仅可由Windows发出,它也可由应用程序本身或其它程序产生。Windows为每一个应用程序都维护一个或多个消息队列,发送到每个程序窗口的消息都排成一个队列。,事件和消息,消息队列和在应用程序中的轮询处理,Windows消息分为三种类型:,标准Windows消息:以WM_前缀(但不包
4、括WM_COMMAND)开始的消息,包括鼠标消息、键盘消息和窗口消息,如WM_MOVE 、WM_PAINT等。控件通知(Control Notification)消息:对控件操作引起的消息,是控件和子窗口向其父窗口发出的WM_COMMAND通知消息。例如,当用户修改了编辑控件中的文本后,编辑控件向其父窗口发送WM_COMMAND通知消息。命令(Command)消息:由菜单项、工具栏按钮、快捷键等用户界面对象发出的WM_COMMAND消息。命令消息与其它消息不同,它可被更广泛的的对象如文档、文档模板、应用程序对象、窗口和视图等处理。,typedef struct tagMSG HWND hWnd
5、; / 目标窗口句柄 UINT message;/ 消息标识 WPARAM wParam;/ 消息参数1(附加信息,16位) LPARAM lParam;/ 消息参数2(附加信息,32位) DWORD time;/ 消息发送时间 POINT pt; / 消息发送时鼠标的屏幕坐标 MSG;,消息用MSG结构表示:,利用Windows API开发程序的用户有这样的体会,即使开发一个简单的Windows应用程序也需要对Windows的编程原理有很深刻的认识,需要手工编写冗长的代码。由于程序的出错率是随着代码长度的增加呈几何级数增长的,而且当程序长度逐渐膨胀时,调试程序会变得越来越困难。因此,传统的W
6、indows应用程序设计需要程序员有极大的耐心和丰富的编程经验。 Visual C+捆绑了微软的基础类MFC,编程时我们就可以利用类的可重用性和可扩充性,大大降低Windows应用程序设计的难度和工作量。,6.2 MFC微软基础类,6.2.1 MFC概述,类库是一个可以在应用程序中使用的相互关联的C+类的集合。 MFC作为一个Windows编程类库,它包含了200多个类,封装了Windows的大部分编程对象以及与它们有关的操作。虽然程序在功能上千差万别,但从本质上看,都可以分为用户界面设计、文件操作、数据库访问及多媒体使用等几部分,这些都可以通过一些类来实现。MFC提供了一个标准化的程序结构,
7、使开发人员不必从头设计一个Windows应用程序。MFC实际上是一个庞大的文件库,它由几百个执行文件和源代码文件(如H文件)组成。,使用标准化的程序代码结构,有利于程序员之间的交流。Visual C+为MFC提供了大量的工具支持,提高了编程效率。如利用MFC AppWizard创建MFC应用程序框架,利用ClassWizard方便地对Windows消息进行管理。MFC应用程序的效率较高,只比传统的Windows C程序低5%左右。并且,在MFC应用程序中还允许混合使用传统的Windows API函数。其它优势:完全支持Windows所有的函数、控件、消息、菜单及对话框;具有良好的稳定性和可移植性,更符合微软的风格等。,采用MFC编程的优点:,6.2.2 MFC体系结构,MFC主要组成部分:类、宏和全局函数。类是MFC中最主要的内容。MFC类是以层次结构方式组织起来的。MFC中的类分成两部分,除了一些辅助类,大多数的MFC类是直接或间接从根类CObject派生而来。几乎每一个派生层次都与一具体的Windows实例相对应,如文档类、窗口类和视图类等。MFC宏主要功能:消息映射、运行时对象类型服务、诊断服务、异常处理。 MFC约定:全局函数以“Afx”为前缀,全局变量以“afx”为前缀。,