资源描述
大家好大家好1 第十三章第十三章 MFC MFC库与库与 Windows Windows程序开发概述程序开发概述C+C+语言程序设计语言程序设计2本章主要内容本章主要内容lVisualC+环境简介环境简介lWindows程序的基本结构程序的基本结构lMFC库简介库简介l使用使用VisualC+开发开发Windows程序程序l使用使用Visual C+Visual C+开发开发 Windows Windows 程序实例程序实例313.1VisualC+环境简介环境简介VisualC+是是Windows系系统统下下一一个个很很好好的的开开发发环境,它拥有友好的界面和强大的功能。环境,它拥有友好的界面和强大的功能。MicrosoftVisualC+,(简称,(简称VisualC+、MSVC、VC+或或VC)是)是Microsoft公司推出的以公司推出的以C+语言为基础的开语言为基础的开发发Windows环境程序,面向对象的可视化集成编程系统。环境程序,面向对象的可视化集成编程系统。它不但具有程序框架自动生成、灵活方便的类管理、代它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点,码编写和界面设计集成交互操作、可开发多种程序等优点,而且通过的设置就可使其生成的程序框架支持数据库接口、而且通过的设置就可使其生成的程序框架支持数据库接口、OLE2.0,WinSock网络、网络、3D控制界面。控制界面。ObjectLinkingandEmbedding,对象连接与嵌入。是一种面向对象的技术。,对象连接与嵌入。是一种面向对象的技术。4 VisualVisualC+C+软件包包含了许多单独的组件,如编辑器、编软件包包含了许多单独的组件,如编辑器、编译器、链接器、生成实用程序、调试器,以及各种各样为开发译器、链接器、生成实用程序、调试器,以及各种各样为开发MicrosoftMicrosoftWindowsWindows下的下的C/C+C/C+程序而设计的工具。程序而设计的工具。VisualStudio把所有的把所有的VisualC+工具结合在一起,集成为工具结合在一起,集成为一个整体,通过一个由窗口、对话框、菜单、工具栏、快捷键一个整体,通过一个由窗口、对话框、菜单、工具栏、快捷键及宏组成的和谐系统,你可以观察和控制整个开发进程。及宏组成的和谐系统,你可以观察和控制整个开发进程。该环境几乎就是该环境几乎就是VisualC+中所能中所能“看见看见”的所有东西。的所有东西。所有其他事情都在其管理下在幕后运行。一般情况下,术语所有其他事情都在其管理下在幕后运行。一般情况下,术语VisualC+既指整个产品,又指它的开发环境。既指整个产品,又指它的开发环境。567813.1VisualC+环境简介环境简介13.1.1VisualC+简介简介13.1.2项目和项目工作空间项目和项目工作空间91VisualC+集成开发环境(集成开发环境(IDE)集集成成开开发发环环境境(IDE)是是一一个个将将程程序序编编辑辑器器、编编译译器器、调调试试工工具具和和其其他他建建立立应应用用程程序序的的工工具具集集成成在在一一起起的的用用于于开开发发应用程序的软件系统。应用程序的软件系统。2向导(向导(Wizard)向向导导是是一一个个通通过过一一步步步步的的帮帮助助引引导导你你工工作作的的工工具具。DeveloperStudio中包含三个向导中包含三个向导。3MFC库库库库(library)是是可可以以重重复复使使用用的的源源代代码码和和目目标标代代码码的的集集合合。MFC(Microsoft Fundamental Classes)是是VisualC+开开发发环环境境所所带带的的类类库库,在在该该类类库库中中提提供供了了大大量量的的类类,可可以帮助开发人员快速建立应用程序。以帮助开发人员快速建立应用程序。13.1.1VisualC+简介简介104.一个用一个用C+开发项目的开发项目的通用开发过程如图所示。通用开发过程如图所示。l建建立立一一个个项项目目的的第第一一步步是是利利用用编编辑辑器器建建立立程程序序代代码码文文件件,包包括括头头文文件件、代代码码文文件件、资资源源文件等。文件等。l然然后后,启启动动编编译译程程序序,编编译译程程序序首首先先调调用用预预处处理理程程序序处处理理程程序序中中的的预预处处理理命命令令,经经过过预预处处理理程程序序处处理理的的代代码码将将作作为为编编译译程程序序的的输输入入。编编译译对对用用户户程程序序进进行行词词法法和和语语法法分分析析,建建立立目标文件。目标文件。l文文件件中中包包括括机机器器代代码码、连连接接指指令令、外外部部引引用用以以及及从从该该源源文文件中产生的函数和数据名。件中产生的函数和数据名。l此此后后,连连接接程程序序将将所所有有的的目目标标代代码码和和用用到到的的静静态态连连接接库库的的代代码码连连接接起起来来,为为所所有有的的外外部部变变量量和和函函数数找找到到其其提提供供地地点点,最最后后产产生生一一个个可可执执行行文文件件。一一般般有有一一个个makefile文文件件来来协协调调各个部分产生可执行文件。各个部分产生可执行文件。115.DeveloperStudio界面界面126.常用功能键及其意义常用功能键及其意义1314图图VisualC+6.0用户界面用户界面15 图图VC+用户界面用户界面1613.1.2项目和项目工作空间项目和项目工作空间lVisualC+程序的核心是项目(程序的核心是项目(Project)。)。l而而项项目目位位于于工工作作空空间间(Workspace)之之下下。每每一一个个VisualC+的工作空间中可以容纳多个项目。的工作空间中可以容纳多个项目。l在在编编写写新新程程序序时时,一一般般首首先先要要创创建建项项目目。项项目目文文件件保保存存了了源源代代码码文文件件和和资资源源文文件件以以及及指指定定的的编编译译设设置置信信息息。VisualC+的的编编译译系系统统使使用用这这些些信信息息编编译译并并链接文件,以创建可执行文件。链接文件,以创建可执行文件。171.新建工程新建工程l项项目目工工作作区区是是一一个个包包含含用用户户的的所所有有相相关关项项目目和和配配置置的的实实体体。工工程程定定义义为为一一个个配配置置和和一一组组文文件件,用用以以生生成成最最终终的的程序或二进制文件。程序或二进制文件。l一一个个项项目目工工作作区区可可以以包包含含多多个个工工程程,这这些些工工程程既既可可以以是是同同一一类类型型的的工工程程,也也可可以以是是不不同同类类型型的的工工程程(如如VisualC+和和VisualJ+工工程程)。工工作作区区现现在在以以.dsw为为后后缀缀名名(以以前前为为.mdp),项项目目文文件件现现在在以以.dsp(以以前前为为.mak)为后缀名。)为后缀名。18要新建一个工程,可以:要新建一个工程,可以:(1)在)在File菜单上,单击菜单上,单击New,选择,选择Projects标签。标签。(2)从列表中选择项目类型)从列表中选择项目类型(3)单单击击CreateNewWorkspace(新新建建工工作作区区)或或AddtoCurrentWorkspace(加入到当前工作区中)。(加入到当前工作区中)。(4)要要使使新新工工程程为为子子工工程程,可可以以选选择择Dependencyof检检查框,并从列表中选择一个工程。查框,并从列表中选择一个工程。1920(5)在在ProjectName框框中中,输输入入新新工工程程名名,确确保保该该名名字必须与工作区中的别的工程名字不重名。字必须与工作区中的别的工程名字不重名。(6)在在Location框框中中,指指定定工工程程存存放放的的目目录录:可可以以直直接接输输入入路路径径名名,也也可可以以单单击击旁旁边边的的Browse按按钮钮,浏浏览选择一个路径。览选择一个路径。(7)单单击击Platform框框中中的的相相应应检检查查框框,指指定定工工程程的的开开发平台发平台212新建工作区新建工作区要创建一个空的工作区,可以:要创建一个空的工作区,可以:(1)在)在File菜单上,单击菜单上,单击New。(2)在随后弹出的对话框上,单击)在随后弹出的对话框上,单击Workspace标签。标签。(3)从类型列表中选择)从类型列表中选择BlankWorkspace。(4)在在WorkspaceName框框中中输输入入名名字字,注注意意名名字字不不能能与与它将要包含的工程同名。它将要包含的工程同名。(5)在)在Location框中指定存放工作区文件的目录。框中指定存放工作区文件的目录。(6)单击)单击OK。223增加已有文件到工程中增加已有文件到工程中(1)打开包含目标工程的项目工作区文件。)打开包含目标工程的项目工作区文件。(2)在在Project菜菜单单上上,单单击击AddtoProject,然然后后单单击击Files。(3)在在InsertFilesintoProject对对话话框框中中,浏浏览览并并定定位位要加入到工程中的文件名,然后选择它们。要加入到工程中的文件名,然后选择它们。(4)从)从InsertInto中选择工程名字,然后单击中选择工程名字,然后单击OK。234打开工作区打开工作区选选择择File-OpenWorkspace,指指定定要要打打开开的的工工作作区区;或或选选择择File-RecentWorkspaces,从从最最近打开过的工作区列表中选择一个。近打开过的工作区列表中选择一个。245设置当前工程设置当前工程选择选择ProjectSetting,可以为当前工程设置编译、链接,可以为当前工程设置编译、链接和和C/C+等各种选项。等各种选项。2526在在创创建建项项目目时时,Visual Visual C+C+默默认认创创建建一一个个工工作作空空间间。工工作作空空间间文文件件保保存存有有关关Visual Visual C+C+窗窗口口的的状状态、位置以及针对该工作空间所做的设置信息。态、位置以及针对该工作空间所做的设置信息。一个完整的项目开发步骤如下一个完整的项目开发步骤如下:(1)创建项目。创建项目。(2)使用工作空间窗口及其使用工作空间窗口及其ClassView、FileView和和ResourceView选项卡对项目中的类、选项卡对项目中的类、文件和资源进行操作。文件和资源进行操作。27(3)在项目中添加或删除文件。在项目中添加或删除文件。(4)在项目中编辑源代码和资源。在项目中编辑源代码和资源。(5)为项目指定编译设备。为项目指定编译设备。(6)编译项目。编译项目。(7)纠正编译或链接错误。纠正编译或链接错误。(8)执行并测试可执行文件。执行并测试可执行文件。(9)调试项目。调试项目。(10)配置和优化代码。配置和优化代码。2813.2Windows程序的基本结构程序的基本结构开始执行开始执行初始化应用初始化应用初始化和创建初始化和创建应用窗口应用窗口进入消息循环并进入消息循环并从消息队列得到从消息队列得到一个消息一个消息当前消息是当前消息是否否“退出退出”?终止执行终止执行程序是否定义了程序是否定义了对此消息的处理对此消息的处理进行默认处理进行默认处理处理消息处理消息图示图示Windows程序和消息的基本流程程序和消息的基本流程YYNN293013.1Windows程序的特点程序的特点WindowsWindows程序的主要特点。程序的主要特点。1用户界面统一、友好用户界面统一、友好2独立于设备的图形操作独立于设备的图形操作3支持多任务支持多任务4队列化消息输入队列化消息输入5支持队列特征的消息驱动模型支持队列特征的消息驱动模型6事件驱动的程序设计事件驱动的程序设计317资源共享资源共享系统资源:系统资源:CPU、显示器、内存、键盘、鼠、显示器、内存、键盘、鼠标、标、定时器、通信端口、窗口可视元素、应用程序、定时器、通信端口、窗口可视元素、应用程序、,由句柄表示。由句柄表示。用户自定义资源:用户自定义资源:窗口可视元素的映像,由一个窗口可视元素的映像,由一个自定义的整数或者名字在程序范围内来惟一标志。自定义的整数或者名字在程序范围内来惟一标志。8程序和资源分开程序和资源分开(1)可降低内存需求。可降低内存需求。(2)便于统一管理和重复利用。便于统一管理和重复利用。(3)应用程序与界面有一定的独立性。应用程序与界面有一定的独立性。9支持应用程序间的数据交换支持应用程序间的数据交换3233Windows程序的基本结构程序的基本结构13.2.1WindowsAPI13.2.2Windows基础基础13.2.3Windows消息映射及处理消息映射及处理3413.2.1WindowsAPIlAPI是应用程序编程接口(是应用程序编程接口(ApplicationProgrammingInterface)的英文缩写。)的英文缩写。l它是大量函数加上数字常量、宏、结构、类型以及其它相它是大量函数加上数字常量、宏、结构、类型以及其它相关项的集合。关项的集合。l可以从可以从C+、MicrosoftVisualBasic汇编语言、汇编语言、Fortran、Pascal以及其它编程语言中调用这些函数。大多数以及其它编程语言中调用这些函数。大多数API函函数定义在称为数定义在称为Windows.h的文件中,也可以从的文件中,也可以从Windows平台软件开发包(平台软件开发包(SDK)中得到它。)中得到它。35l根根据据WindowsAPI函函数数的的功功能能,可可以以将将其分为三类:其分为三类:窗窗口口管管理理函函数数。用用以以实实现现窗窗口口的的创创建建、移动和修改功能。移动和修改功能。图图形形设设备备(GUI)函函数数。用用以以实实现现与与设设备备无关的图形操作功能。无关的图形操作功能。系系统统服服务务函函数数。用用以以实实现现与与操操作作系系统统有有关的多种功能。关的多种功能。3613.2.2Windows基础基础要要掌掌握握Windows编编程程的的方方法法,必必须须要要了了解以下内容:解以下内容:事件及事件驱动的概念。事件及事件驱动的概念。消息及其在编程中的应用。消息及其在编程中的应用。绘图及设备环境。绘图及设备环境。对象与句柄。对象与句柄。坐标系。坐标系。371事件事件lWindows花花费费大大量量时时间间等等待待用用户户的的动动作作以以便便作作出响应,所以这种系统也叫做事件驱动的系统。出响应,所以这种系统也叫做事件驱动的系统。l当当用用户户按按下下一一个个键键、移移动动鼠鼠标标或或单单击击鼠鼠标标按按钮钮时时,计计算算机机通通知知Windows系系统统已已经经发发生生了了一一个个事事件件,以以及及事事件件的的种种类类、发发生生的的时时间间、发发生生的的位位置置(如如坐坐标标值值)。l事件以如下三种方式产生:事件以如下三种方式产生:通过输入设备,如键盘和鼠标。通过输入设备,如键盘和鼠标。38通通过过屏屏幕幕上上可可视视的的对对象象,如如菜菜单单、工工具栏按钮、滚动条和对话框上的控件。具栏按钮、滚动条和对话框上的控件。来来自自Windows内内部部,如如当当一一个个后后面面的的窗口显示到前面来。窗口显示到前面来。392消息消息当当Windows捕捕获获一一个个事事件件后后,它它会会编编写写一一条条消消息息,将将相相关关信信息息放放入入一一个个数数据据结结构构中中,然然后后将将包包含含此此数数据据结结构构的的消消息息发发送送给给需需要要消消息息的的程程序序。Windows消消息息是是在在Windows文文件件中中用用宏宏定定义义的的常常数。数。消消息息常常数数名名通通常常以以WM开开头头,格格式式为为WM_XXX,例如,例如WM_QUIT、WM_CHAR。40Windows将将消消息息放放入入目目标标应应用用程程序序的的消消息息队队列列中中。在在消消息息队队列列中中所所有有消消息息都都处处于于等等待待状状态态,直直到应用程序准备处理它。到应用程序准备处理它。应应用用程程序序中中通通常常有有一一段段代代码码称称为为消消息息循循环环,形式如下:形式如下:While(GetMessage(&msg,NULL,0,0)TranslateMessage(&msg);DispatchMessage(&msg);41GetMessage的含义是从消息队列中提取一个消息。的含义是从消息队列中提取一个消息。TranslateMessage含义大致是将虚拟键消息转换为字符消息。含义大致是将虚拟键消息转换为字符消息。虚拟键是虚拟键是Windows系统定义的键盘按键。键盘上有多少个按系统定义的键盘按键。键盘上有多少个按键,就对应有多个虚拟键。键,就对应有多个虚拟键。TranslateMessage就将虚拟键转换成对应的字符。例如虚就将虚拟键转换成对应的字符。例如虚拟键拟键“A”(因为键盘上是大写,所以没有小写的)转换成字(因为键盘上是大写,所以没有小写的)转换成字符符“a”(如果键盘处于大写状态)或字符(如果键盘处于大写状态)或字符“A”(如果键盘(如果键盘处于小写状态)。处于小写状态)。DispatchMessage的含义就是向的含义就是向msg中提到的窗口的窗口处理中提到的窗口的窗口处理函数发送这个消息。函数发送这个消息。msg的类型是结构体,的类型是结构体,其中就包含了向哪个窗口发送消息的内其中就包含了向哪个窗口发送消息的内容。容。42l在在应应用用程程序序检检索索到到WM_QUIT消消息息之之前前,这这个个循循环环 会会 不不 断断 运运 行行。当当 它它 收收 到到 WM_QUIT时时,GetMessage返返回回false,循循环环停停止止,同同时时应应用用程序终止。程序终止。l当当GetMessage返返回回一一条条消消息息后后,循循环环将将它它传传递递给给TranslateMessage函函数数以以检检测测该该消消息息是是不不是是来来自自键键盘盘。如如果果是是来来自自键键盘盘的的消消息息,则则TranslateMessage将将 原原 始始 键键 盘盘 消消 息息 转转 化化 为为WM_CHAR消消息息。WM_CHAR消消息息是是专专为为传传递递有有关关键键入入字字母母信信息息设设计计的的。TranslateMessage不处理非键盘消息。不处理非键盘消息。43l消息处理函数是用于处理特定消息的一些代码。消息处理函数是用于处理特定消息的一些代码。收到消息的应用程序会做些什么,取决于应用程序收到消息的应用程序会做些什么,取决于应用程序本身。本身。l程序员可以编写相应的处理函数以处理消息。程序员可以编写相应的处理函数以处理消息。如果如果程序员没有为该消息编写处理函数,又需要把消息程序员没有为该消息编写处理函数,又需要把消息传递给传递给Windows,让,让Windows对消息进行默认处对消息进行默认处理,理,Windows会提供一个称作会提供一个称作DefWindowProc的的处理函数。处理函数。lWindows首先调用程序员提供的处理函数,而不首先调用程序员提供的处理函数,而不用用Windows的默认方式。的默认方式。44l对于特定的消息有许多标准或典型的处理。对于特定的消息有许多标准或典型的处理。l例例如如,WM_PAINT消消息息(在在窗窗口口中中重重新新绘绘制制内内容容时时发发送送)的的处处理理函函数数需需要要重重新新构构造造显显示示在在窗窗口口中中的的图图像,需要重新绘制可见的文本行、图形等等。像,需要重新绘制可见的文本行、图形等等。lWM_COMMAND用用于于处处理理来来自自菜菜单单和和按按钮钮的的命命令令,相相应应的的处处理理函函数数可可能能会会显显示示一一个个对对话话框框、完完成成一一次次计算、选择一个选项或启动其它的操作等。计算、选择一个选项或启动其它的操作等。453绘图及设备环境绘图及设备环境lWindows具具有有图图形形用用户户界界面面(GUI),它它包包括括菜菜单单、工工具具栏栏、滚滚动动条条和和对对话话框框中中的的按按钮钮等等元元素素。这这些些元元素素都都是是被被绘绘制制出来的。出来的。l当当程程序序第第一一次次显显示示窗窗口口时时,需需要要第第一一次次绘绘制制窗窗口口的的内内部部或或客客户户区区。客客户户区区是是由由窗窗口口的的边边界界、标标题题栏栏以以及及框框架架元元素素包包围的空间。围的空间。46l在在窗窗口口的的任任何何部部分分被被破破坏坏或或无无效效时时,需需要要重重新新绘绘制制它它们们。例例如如,当当其其它它窗窗口口覆覆盖盖在在应应用用程程序序的的窗窗口口上上,然然后后又又离离开开。Windows不不会会保保存存窗窗口口中中的的图图像像,由由于于它它不不能能自自己己重重新新绘绘制制所所有有的的部部分分,因因此此程程序序需需要要重新绘制窗口的内容。重新绘制窗口的内容。l在要求重新绘制时,一般由在要求重新绘制时,一般由Windows负责绘制窗口负责绘制窗口的框架,而程序员负责绘制客户区。与客户区对应的框架,而程序员负责绘制客户区。与客户区对应有一个有一个Windows对象称为设备环境(对象称为设备环境(DeviceContext,通常缩写为,通常缩写为DC)。)。474对象与句柄对象与句柄对对设设备备环环境境的的访访问问是是通通过过Windows返返回回的的句句柄柄进进行行的的。用用于于描描述述设设备备环环境境句句柄柄的的变变量量类类型型是是HDC。事事实实上上,Windows提提供供了了许许多多种种类类型型的的句句柄柄(窗窗口口、字字体体等等)。每每种种对对象象都都有有一一个个相相应应的的句句柄柄类类型型,例例如如HWND和和HFONT。常常见的见的Windows对象的句柄如下:对象的句柄如下:Windows对象对象相关句柄相关句柄设备环境设备环境HDC窗口窗口HWND菜单菜单HMENU48l光标光标HCURSORl画笔画笔HPENl画刷画刷HBRUSHl字体字体HFONTl图标图标HICONl位图位图HBITMAPl调色板调色板HPALETTEl文件文件HFILEl区域区域HRGNl加速键表加速键表HACCEL49 实际上,句柄本质上就是一个指针,但它和实际上,句柄本质上就是一个指针,但它和通常意义上的指针是有区别的。通常意义上的指针是有区别的。在在windowswindows里,句柄用来指向一些较大的对象,里,句柄用来指向一些较大的对象,hWndhWnd、hDchDc等等,由于这些对象占用内存较大,有等等,由于这些对象占用内存较大,有时难免会被挪动,因此所谓时难免会被挪动,因此所谓“指向指向”它们的句柄并它们的句柄并不直接指向它们,而是通过另一个指针来间接地指不直接指向它们,而是通过另一个指针来间接地指向,这样才能保证某一个句柄值在其生命期内保持向,这样才能保证某一个句柄值在其生命期内保持不变。不变。50l在在MFC中中,有有许许多多函函数数是是DCC类类的的成成员员函函数数。DCC指指设设备备环环境境类类(DeviceContextClass)。Windows中中负负责责设设备备环环境境和和绘绘制制函函数数的的部部分分称称为为图图形形设设备备接接口口(GraphicsDeviceInterface,GDI)。lPolygon用几个点绘制多边形用几个点绘制多边形lPie绘制饼图绘制饼图lRectangle在指定的坐标处绘制矩形在指定的坐标处绘制矩形lEllipse在指定的坐标处绘制椭圆在指定的坐标处绘制椭圆51lGDI是是一一个个完完整整的的两两维维绘绘制制系系统统,它它具具有有设设备备环环境境、绘绘制制函函数数以以及及用用于于测测量量和和定定位位所所绘绘制制的的图图像像的的几几种种坐标系统。坐标系统。525坐标系坐标系要要为为绘绘制制和和其其它它任任务务指指定定位位置置,需需要要坐坐标系统。标系统。Windows提提供供了了8种种不不同同的的坐坐标标系系,每每种都有各自的用途。种都有各自的用途。Windows默默认认的的坐坐标标系系原原点点在在窗窗口口客客户户区区的的左左上上角角,x向向右右为为正正,y向向下下为为正正,没没有有负的坐标。负的坐标。5313.2.3Windows消息映射及处理消息映射及处理我们知道,用我们知道,用C+编写编写MS-DOS程序时一程序时一定要有一个定要有一个main()函数,程序由函数,程序由main()函数函数开始运行,其它函数都是由开始运行,其它函数都是由main()函数调用的。函数调用的。同理,同理,Windows程序需要有一个程序需要有一个WinMain()函数函数(如果应用如果应用MFC类库,类库,WinMain()函数函数就被隐蔽了就被隐蔽了),该函数主要是建立应用程序的主,该函数主要是建立应用程序的主窗口。窗口。54lWindows程程序序与与MS-DOS程程序序的的根根本本差差别在于:别在于:lMS-DOS程程序序是是通通过过调调用用操操作作系系统统的的功功能来获得用户输入的,能来获得用户输入的,l而而Windows程程序序则则是是通通过过操操作作系系统统发发送送的的消消息息来来处处理理用用户户输输入入的的,程程序序的的主主窗窗口口中中需需要要包包含含处处理理Windows所所发发送送消消息息的代码。的代码。55l在在Windows程程序序中中,管管理理消消息息的的方方式式通通常常是是这这样样的:的:l当当发发生生某某个个消消息息(比比如如用用户户移移动动了了鼠鼠标标和和按按下下键键盘盘等等)后后,该该消消息息进进入入消消息息队队列列,操操作作系系统统根根据据消消息息提供的信息决定由哪个应用程序来处理。提供的信息决定由哪个应用程序来处理。l该该应应用用程程序序依依照照一一定定的的方方式式查查找找应应用用程程序序中中各各个个类类的的消消息息映映射射(一一组组宏宏,这这些些宏宏用用来来确确定定某某个个消消息息及及相相应应的的处处理理程程序序的的对对应应关关系系),找找到到处处理理程程序序,然然后由处理程序执行。后由处理程序执行。56WindowsWindows程序要处理的消息种类如下:程序要处理的消息种类如下:Windows消息。消息。该类消息以该类消息以WM_开头开头(WM_COMMAND例外),通常由窗口和视图来处理。例外),通常由窗口和视图来处理。这些消息常常带有参数,用于决定处理该消息的方式。这些消息常常带有参数,用于决定处理该消息的方式。由控件和其它子窗口发送给父窗口的由控件和其它子窗口发送给父窗口的WM_COMMAND消消息。息。这些消息中包括这些消息中包括EN_CHANGE通知码。如当用户在编通知码。如当用户在编辑框中键入文本或进行修改时,就会向系统发送一个带辑框中键入文本或进行修改时,就会向系统发送一个带EN_CHANGE通知码的通知码的WM_COMMAND消息。消息。来来自自于于用用户户界界面面对对象象的的WM_COMMAND消消息息。这这些些用用户界面对象包括菜单、工具栏按钮和快捷键。户界面对象包括菜单、工具栏按钮和快捷键。5713.3MFC库简介库简介l类库是一个可以在应用程序中使用的相互类库是一个可以在应用程序中使用的相互关联的类的集合。关联的类的集合。lMFC库库Microsoft基本类库是一个基本类库是一个Windows应用程序框架,它定义了应用程应用程序框架,它定义了应用程序的结构,并实现了标准的用户接口:序的结构,并实现了标准的用户接口:管理窗口、菜单、对话框,实现基本的管理窗口、菜单、对话框,实现基本的输入输入/输出和数据存储。输出和数据存储。58lMFCMFC是用来编写是用来编写WindowsWindows应用程序的应用程序的C+C+类集,类集,该类集以层次结构组织起来,其中封装了大部该类集以层次结构组织起来,其中封装了大部分分Windows APIWindows API函数和函数和WindowsWindows控件,它所包含控件,它所包含的功能涉及到整个的功能涉及到整个WindowsWindows操作系统。操作系统。l MFCMFC不仅为用户提供了不仅为用户提供了 WindowsWindows图形环境下图形环境下应用程序的框架,而且还提供了创建应用程序应用程序的框架,而且还提供了创建应用程序的组件。的组件。59MFCMFC为为我我们们提提供供了了大大量量可可重重用用代代码码,隐隐藏藏了了程程序序设设计计中中的的许许多多复复杂杂工工作作,这这也也是是面面向向对对象象方方法法的的典型体现。典型体现。MFC(MicrosoftFoundationClassLibrary)中中的各种类结合起来构成了一个应用程序框架,它的的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立目的就是让程序员在此基础上来建立Windows下的下的应用程序。应用程序。60总体上,总体上,MFC框架定义了应用程序的轮廓,并提供框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,了用户接口的标准实现方法,程序员所要做的就是通程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个过预定义的接口把具体应用程序特有的东西填入这个轮廓。轮廓。MicrosoftVisualC+提供了相应的工具来完成这提供了相应的工具来完成这个工作:个工作:AppWizard可以用来生成初步的框架文件可以用来生成初步的框架文件(代码和资源等);(代码和资源等);资源编辑器资源编辑器用于帮助直观地设计用于帮助直观地设计用户接口;用户接口;ClassWizard用来协助添加代码到框架文件;用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。最后,编译,则通过类库实现了应用程序特定的逻辑。61MFCMFC还很好地保持了程序的向下兼容性还很好地保持了程序的向下兼容性是用来编是用来编写写WindowsWindows应用程序应用程序的的C+C+类集类集以层次结构组织以层次结构组织封装了大部分封装了大部分APIAPI函数函数提供了图形环境下应用程序的框架提供了图形环境下应用程序的框架提供了创建应用程序的组件提供了创建应用程序的组件提供了大量的基类供程序员根据不同的应用环境进行扩充提供了大量的基类供程序员根据不同的应用环境进行扩充允许在编程过程中自定义和扩展应用程序中的类允许在编程过程中自定义和扩展应用程序中的类较好的移植性,较好的移植性,可移植于众多的平台可移植于众多的平台MFCMFC62MFCMFC类的组织结构类的组织结构MFC库中的类按层次关系划分类:库中的类按层次关系划分类:(1)根类:)根类:CObject(2)应用程序体系结构类)应用程序体系结构类(3)窗口、对话框和控件类)窗口、对话框和控件类(4)绘图和打印类)绘图和打印类(5)简单数据类型类)简单数据类型类(6)数组、列表和映射类)数组、列表和映射类(7)文件和数据库类)文件和数据库类(8)Internet和网络工作类和网络工作类(9)OLE类类(10)调试和异常类)调试和异常类对象连接与嵌入对象连接与嵌入631 1、MFCMFC中多数类和用户中多数类和用户自定义子类的根类,是自定义子类的根类,是抽象基类。它提供了许抽象基类。它提供了许多编程所需的公共操作多编程所需的公共操作对象的建立对象的建立对象的删除对象的删除运行时信息运行时信息对象诊断输出对象诊断输出串行化支持串行化支持应用程序和线程支持类应用程序和线程支持类命令相关类命令相关类文档类文档类文档模板类文档模板类视类视类(体系结构体系结构)框架窗口框架窗口(体系结构体系结构)2 2、应用程序应用程序体系结构类体系结构类3 3、窗口、窗口、对话框和控对话框和控件类件类框架窗口类(窗口)框架窗口类(窗口)视类(窗口)视类(窗口)对话框类对话框类控件条类控件条类4 4、绘绘图和打图和打印类印类输出输出(设备相关设备相关)类类绘图工具类绘图工具类5 5、简单数据类型类简单数据类型类6 6、数组、列表和映数组、列表和映射类射类数组类数组类列表类列表类映射类映射类647 7、文件和数据库类文件和数据库类文件文件I/OI/O类类DAODAO类类ODBCODBC类类8 8、InternetInternet和网络工作类和网络工作类LSAPILSAPI类类Windows SocketWindows Socket类类Win32 InternetWin32 Internet类类9 9、OLEOLE类类OLEOLE容器类容器类OLEOLE服务器类服务器类OLEOLE拖放和数据传输类拖放和数据传输类OLEOLE普通对话框类普通对话框类OLEOLE动画类动画类OLEOLE动画类动画类OLEOLE控件类控件类活动文档类活动文档类其他文档类其他文档类1010、调试和异常类调试和异常类调试支持类调试支持类异常类异常类对象连接与嵌入对象连接与嵌入65MFCMFC的层次结构的层次结构命令相关类:命令相关类:CCmdTarget类类线程基类:线程基类:CWinThread类类窗口应用程序类:窗口应用程序类:CWinApp类类窗口类:窗口类:CWnd类类666713.4 13.4 使用使用Visual C+Visual C+开发开发WindowsWindows程序程序l建立一个应用程序框架建立一个应用程序框架l观察自动生成的应用程序观察自动生成的应用程序l构造应用程序的用户接口构造应用程序的用户接口l将菜单映射到消息处理函数将菜单映射到消息处理函数l将工具栏按钮映射到命令将工具栏按钮映射到命令l测试自己编写的消息处理函数测试自己编写的消息处理函数l增加对话框增加对话框l初始化、验证和提取对话框中的数据初始化、验证和提取对话框中的数据l创建新增的类创建新增的类l添加现成的组件到应用程序中添加现成的组件到应用程序中l实现自己的文档类实现自己的文档类l实现实现Open、Save和和SaveAs命令命令l实现视图类实现视图类l改进缺省的打印改进缺省的打印l增加屏幕滚动增加屏幕滚动l创建表单视图创建表单视图l创建数据库表单创建数据库表单l构造(构造(Build)、)、测试和调试应用程序测试和调试应用程序68 13.5 13.5 使用使用Visual C+Visual C+开发开发 Windows Windows 程序实例程序实例l为了对为了对Windows程序开发方法有一个初步印象,下程序开发方法有一个初步印象,下面给出一个完整的使用面给出一个完整的使用VisualC+开发开发Windows程序的程序的实例。实例。l用用MFC向向导导创创建建如如下下图图所所示示的的编编辑辑框框,在在编编辑辑框框中中实实现算术加、减、乘和除的运算。现算术加、减、乘和除的运算。69图图可实现算术加、减、乘和除的运算的界面可实现算术加、减、乘和除的运算的界面70例:人员信息管理程序例:人员信息管理程序l用用MFC设计一个人员信息管理程序的设计一个人员信息管理程序的界面界面通过对话框输入人员信息在窗口中显示人员信息71实例实例321利用利用MSComm控件进行串口通信控件进行串口通信727374757677
展开阅读全文