第十三章MFC库与Windows程序开发概述_第1页
第十三章MFC库与Windows程序开发概述_第2页
第十三章MFC库与Windows程序开发概述_第3页
第十三章MFC库与Windows程序开发概述_第4页
第十三章MFC库与Windows程序开发概述_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十三章MFC库与Windows程序开发概述第十三章MFC库与Windows程序开发概述第十三章MFC库与Windows程序开发概述本章主要内容VisualC++环境简介Windows程序的基本结构MFC库简介使用VisualC++开发Windows程序使用VisualC++开发Windows程序实例13.1VisualC++环境简介

VisualC++是Windows系统下一个很好的开发环境,它拥有友好的界面和强大的功能。MicrosoftVisualC++,(简称VisualC++、MSVC、VC++或VC)是Microsoft公司推出的以C++语言为基础的开发Windows环境程序,面向对象的可视化集成编程系统。

它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点,而且通过的设置就可使其生成的程序框架支持数据库接口、OLE2.0,WinSock网络、3D控制界面。ObjectLinkingandEmbedding,对象连接及嵌入。是一种面向对象的技术。

Visual

C++软件包包含了许多单独的组件,如编辑器、编译器、链接器、生成实用程序、调试器,以及各种各样为开发Microsoft

Windows下的C/C++程序而设计的工具。

Visual

Studio把所有的Visual

C++工具结合在一起,集成为一个整体,通过一个由窗口、对话框、菜单、工具栏、快捷键及宏组成的和谐系统,你可以观察和控制整个开发进程。

该环境几乎就是Visual

C++中所能“看见”的所有东西。所有其他事情都在其管理下在幕后运行。一般情况下,术语Visual

C++既指整个产品,又指它的开发环境。13.1VisualC++环境简介13.1.1VisualC++简介13.1.2项目和项目工作空间1.VisualC++集成开发环境(IDE)集成开发环境(IDE)是一个将程序编辑器、编译器、调试工具和其他建立应用程序的工具集成在一起的用于开发应用程序的软件系统。

2.向导(Wizard)向导是一个通过一步步的帮助引导你工作的工具。DeveloperStudio中包含三个向导。

3.MFC库库(library)是可以重复使用的源代码和目标代码的集合。MFC(MicrosoftFundamentalClasses)是VisualC++开发环境所带的类库,在该类库中提供了大量的类,可以帮助开发人员快速建立应用程序。

13.1.1VisualC++简介4.一个用C++开发项目的通用开发过程如图所示。

建立一个项目的第一步是利用编辑器建立程序代码文件,包括头文件、代码文件、资源文件等。然后,启动编译程序,编译程序首先调用预处理程序处理程序中的预处理命令,经过预处理程序处理的代码将作为编译程序的输入。编译对用户程序进行词法和语法分析,建立目标文件。文件中包括机器代码、连接指令、外部引用以及从该源文件中产生的函数和数据名。此后,连接程序将所有的目标代码和用到的静态连接库的代码连接起来,为所有的外部变量和函数找到其提供地点,最后产生一个可执行文件。一般有一个makefile文件来协调各个部分产生可执行文件。5.DeveloperStudio界面6.常用功能键及其意义图VisualC++6.0用户界面

VC++用户界面13.1.2项目和项目工作空间

VisualC++程序的核心是项目(Project)。而项目位于工作空间(Workspace)之下。每一个VisualC++的工作空间中可以容纳多个项目。在编写新程序时,一般首先要创建项目。项目文件保存了源代码文件和资源文件以及指定的编译设置信息。VisualC++的编译系统使用这些信息编译并链接文件,以创建可执行文件。1.新建工程项目工作区是一个包含用户的所有相关项目和配置的实体。工程定义为一个配置和一组文件,用以生成最终的程序或二进制文件。一个项目工作区可以包含多个工程,这些工程既可以是同一类型的工程,也可以是不同类型的工程(如VisualC++和VisualJ++工程)。工作区现在以.dsw为后缀名(以前为.mdp),项目文件现在以.dsp(以前为.mak)为后缀名。要新建一个工程,可以:(1)在File菜单上,单击New,选择Projects标签。(2)从列表中选择项目类型(3)单击CreateNewWorkspace(新建工作区)或AddtoCurrentWorkspace(加入到当前工作区中)。(4)要使新工程为子工程,可以选择Dependencyof检查框,并从列表中选择一个工程。(5)在ProjectName框中,输入新工程名,确保该名字必须及工作区中的别的工程名字不重名。(6)在Location框中,指定工程存放的目录:可以直接输入路径名,也可以单击旁边的Browse按钮,浏览选择一个路径。(7)单击Platform框中的相应检查框,指定工程的开发平台2新建工作区要创建一个空的工作区,可以:

(1)在File菜单上,单击New。(2)在随后弹出的对话框上,单击Workspace标签。(3)从类型列表中选择BlankWorkspace。(4)在WorkspaceName框中输入名字,注意名字不能及它将要包含的工程同名。(5)在Location框中指定存放工作区文件的目录。(6)单击OK。3增加已有文件到工程中(1)打开包含目标工程的项目工作区文件。(2)在Project菜单上,单击AddtoProject,然后单击Files。(3)在InsertFilesintoProject对话框中,浏览并定位要加入到工程中的文件名,然后选择它们。(4)从InsertInto中选择工程名字,然后单击OK。4打开工作区

选择File-OpenWorkspace,指定要打开的工作区;或选择File-RecentWorkspaces,从最近打开过的工作区列表中选择一个。5设置当前工程

选择ProjectSetting,可以为当前工程设置编译、链接和C/C++等各种选项。

在创建项目时,VisualC++默认创建一个工作空间。工作空间文件保存有关VisualC++窗口的状态、位置以及针对该工作空间所做的设置信息。

一个完整的项目开发步骤如下:(1)创建项目。

(2)使用工作空间窗口及其ClassView、FileView和ResourceView选项卡对项目中的类、文件和资源进行操作。(3)在项目中添加或删除文件。(4)在项目中编辑源代码和资源。(5)为项目指定编译设备。(6)编译项目。(7)纠正编译或链接错误。(8)执行并测试可执行文件。(9)调试项目。(10)配置和优化代码。13.2Windows程序的基本结构开始执行初始化应用初始化和创建应用窗口进入消息循环并从消息队列得到一个消息当前消息是否“退出”?终止执行程序是否定义了对此消息的处理进行默认处理处理消息图示

Windows程序和消息的基本流程YYNN13.1Windows程序的特点Windows程序的主要特点。

1.用户界面统一、友好

2.独立于设备的图形操作

3.支持多任务

4.队列化消息输入

5.支持队列特征的消息驱动模型

6.事件驱动的程序设计7.资源共享

系统资源:CPU、显示器、内存、键盘、鼠标、定时器、通信端口、窗口可视元素、应用程序、…,由句柄表示。

用户自定义资源:窗口可视元素的映像,由一个自定义的整数或者名字在程序范围内来惟一标志。

8.程序和资源分开

(1)可降低内存需求。

(2)便于统一管理和重复利用。

(3)应用程序及界面有一定的独立性。

9.支持应用程序间的数据交换Windows程序的基本结构13.2.1WindowsAPI13.2.2Windows基础13.2.3Windows消息映射及处理13.2.1WindowsAPIAPI是应用程序编程接口(ApplicationProgrammingInterface)的英文缩写。它是大量函数加上数字常量、宏、结构、类型以及其它相关项的集合。可以从C++、MicrosoftVisualBasic汇编语言、Fortran、Pascal以及其它编程语言中调用这些函数。大多数API函数定义在称为Windows.h的文件中,也可以从Windows平台软件开发包(SDK)中得到它。根据WindowsAPI函数的功能,可以将其分为三类:

①窗口管理函数。用以实现窗口的创建、移动和修改功能。②图形设备(GUI)函数。用以实现及设备无关的图形操作功能。③系统服务函数。用以实现与操作系统有关的多种功能。13.2.2Windows基础要掌握Windows编程的方法,必须要了解以下内容:①事件及事件驱动的概念。②消息及其在编程中的应用。③绘图及设备环境。④对象及句柄。⑤坐标系。1.事件

Windows花费大量时间等待用户的动作以便作出响应,所以这种系统也叫做事件驱动的系统。当用户按下一个键、移动鼠标或单击鼠标按钮时,计算机通知Windows系统已经发生了一个事件,以及事件的种类、发生的时间、发生的位置(如坐标值)。

事件以如下三种方式产生:①通过输入设备,如键盘和鼠标。②通过屏幕上可视的对象,如菜单、工具栏按钮、滚动条和对话框上的控件。③来自Windows内部,如当一个后面的窗口显示到前面来。

2.消息

当Windows捕获一个事件后,它会编写一条消息,将相关信息放入一个数据结构中,然后将包含此数据结构的消息发送给需要消息的程序。Windows消息是在Windows文件中用宏定义的常数。消息常数名通常以WM开头,格式为WM_XXX,例如WM_QUIT、WM_CHAR。

Windows将消息放入目标应用程序的消息队列中。在消息队列中所有消息都处于等待状态,直到应用程序准备处理它。

应用程序中通常有一段代码称为消息循环,形式如下:

While(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}GetMessage的含义是从消息队列中提取一个消息。

TranslateMessage含义大致是将虚拟键消息转换为字符消息。

虚拟键是Windows系统定义的键盘按键。键盘上有多少个按键,就对应有多个虚拟键。

TranslateMessage就将虚拟键转换成对应的字符。例如虚拟键“A”(因为键盘上是大写,所以没有小写的)转换成字符“a”(如果键盘处于大写状态)或字符“A”(如果键盘处于小写状态)。

DispatchMessage的含义就是向msg中提到的窗口的窗口处理函数发送这个消息。

msg的类型是结构体,其中就包含了向哪个窗口发送消息的内容。在应用程序检索到WM_QUIT消息之前,这个循环会不断运行。当它收到WM_QUIT时,GetMessage返回false,循环停止,同时应用程序终止。当GetMessage返回一条消息后,循环将它传递给TranslateMessage函数以检测该消息是不是来自键盘。如果是来自键盘的消息,则TranslateMessage将原始键盘消息转化为WM_CHAR消息。WM_CHAR消息是专为传递有关键入字母信息设计的。TranslateMessage不处理非键盘消息。

消息处理函数是用于处理特定消息的一些代码。收到消息的应用程序会做些什么,取决于应用程序本身。程序员可以编写相应的处理函数以处理消息。如果程序员没有为该消息编写处理函数,又需要把消息传递给Windows,让Windows对消息进行默认处理,Windows会提供一个称作DefWindowProc的处理函数。Windows首先调用程序员提供的处理函数,而不用Windows的默认方式。

对于特定的消息有许多标准或典型的处理。例如,WM_PAINT消息(在窗口中重新绘制内容时发送)的处理函数需要重新构造显示在窗口中的图像,需要重新绘制可见的文本行、图形等等。WM_COMMAND用于处理来自菜单和按钮的命令,相应的处理函数可能会显示一个对话框、完成一次计算、选择一个选项或启动其它的操作等。

3.绘图及设备环境

Windows具有图形用户界面(GUI),它包括菜单、工具栏、滚动条和对话框中的按钮等元素。这些元素都是被绘制出来的。当程序第一次显示窗口时,需要第一次绘制窗口的内部或客户区。客户区是由窗口的边界、标题栏以及框架元素包围的空间。在窗口的任何部分被破坏或无效时,需要重新绘制它们。例如,当其它窗口覆盖在应用程序的窗口上,然后又离开。Windows不会保存窗口中的图像,由于它不能自己重新绘制所有的部分,因此程序需要重新绘制窗口的内容。在要求重新绘制时,一般由Windows负责绘制窗口的框架,而程序员负责绘制客户区。及客户区对应有一个Windows对象称为设备环境(DeviceContext,通常缩写为DC)。4.对象及句柄

对设备环境的访问是通过Windows返回的句柄进行的。用于描述设备环境句柄的变量类型是HDC。事实上,Windows提供了许多种类型的句柄(窗口、字体等)。每种对象都有一个相应的句柄类型,例如HWND和HFONT。常见的Windows对象的句柄如下:

Windows对象 相关句柄设备环境 HDC

窗口 HWND

菜单 HMENU光标 HCURSOR画笔 HPEN画刷 HBRUSH字体 HFONT图标 HICON位图 HBITMAP调色板 HPALETTE文件 HFILE区域 HRGN加速键表 HACCEL

实际上,句柄本质上就是一个指针,但它和通常意义上的指针是有区别的。

在windows里,句柄用来指向一些较大的对象,hWnd、hDc等等,由于这些对象占用内存较大,有时难免会被挪动,因此所谓“指向”它们的句柄并不直接指向它们,而是通过另一个指针来间接地指向,这样才能保证某一个句柄值在其生命期内保持不变。在MFC中,有许多函数是DCC类的成员函数。DCC指设备环境类(DeviceContextClass)。Windows中负责设备环境和绘制函数的部分称为图形设备接口(GraphicsDeviceInterface,GDI)。

Polygon 用几个点绘制多边形

Pie 绘制饼图

Rectangle 在指定的坐标处绘制矩形

Ellipse 在指定的坐标处绘制椭圆

GDI是一个完整的两维绘制系统,它具有设备环境、绘制函数以及用于测量和定位所绘制的图像的几种坐标系统。5.坐标系要为绘制和其它任务指定位置,需要坐标系统。

Windows提供了8种不同的坐标系,每种都有各自的用途。

Windows默认的坐标系原点在窗口客户区的左上角,x向右为正,y向下为正,没有负的坐标。13.2.3Windows消息映射及处理我们知道,用C++编写MS-DOS程序时一定要有一个main()函数,程序由main()函数开始运行,其它函数都是由main()函数调用的。

同理,Windows程序需要有一个WinMain()函数(如果应用MFC类库,WinMain()函数就被隐蔽了),该函数主要是建立应用程序的主窗口。Windows程序及MS-DOS程序的根本差别在于:MS-DOS程序是通过调用操作系统的功能来获得用户输入的,而Windows程序则是通过操作系统发送的消息来处理用户输入的,程序的主窗口中需要包含处理Windows所发送消息的代码。在Windows程序中,管理消息的方式通常是这样的:当发生某个消息(比如用户移动了鼠标和按下键盘等)后,该消息进入消息队列,操作系统根据消息提供的信息决定由哪个应用程序来处理。该应用程序依照一定的方式查找应用程序中各个类的消息映射(一组宏,这些宏用来确定某个消息及相应的处理程序的对应关系),找到处理程序,然后由处理程序执行。

Windows程序要处理的消息种类如下:①Windows消息。该类消息以WM_开头(WM_COMMAND例外),通常由窗口和视图来处理。这些消息常常带有参数,用于决定处理该消息的方式。②由控件和其它子窗口发送给父窗口的WM_COMMAND消息。这些消息中包括EN_CHANGE通知码。如当用户在编辑框中键入文本或进行修改时,就会向系统发送一个带EN_CHANGE通知码的WM_COMMAND消息。

③来自于用户界面对象的WM_COMMAND消息。这些用户界面对象包括菜单、工具栏按钮和快捷键。13.3MFC库简介类库是一个可以在应用程序中使用的相互关联的类的集合。MFC库——Microsoft基本类库是一个Windows应用程序框架,它定义了应用程序的结构,并实现了标准的用户接口:管理窗口、菜单、对话框,实现基本的输入/输出和数据存储。

MFC是用来编写Windows应用程序的C++类集,该类集以层次结构组织起来,其中封装了大部分WindowsAPI函数和Windows控件,它所包含的功能涉及到整个Windows操作系统。

MFC不仅为用户提供了Windows图形环境下应用程序的框架,而且还提供了创建应用程序的组件。

MFC为我们提供了大量可重用代码,隐藏了程序设计中的许多复杂工作,这也是面向对象方法的典型体现。

MFC(MicrosoftFoundationClassLibrary)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序。

总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。

MicrosoftVisualC++提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。MFC还很好地保持了程序的向下兼容性是用来编写Windows应用程序的C++类集以层次结构组织封装了大部分API函数提供了图形环境下应用程序的框架提供了创建应用程序的组件提供了大量的基类供程序员根据不同的应用环境进行扩充允许在编程过程中自定义和扩展应用程序中的类较好的移植性,可移植于众多的平台MFCMFC类的组织结构

MFC库中的类按层次关系划分类:(1)根类:CObject(2)应用程序体系结构类(3)窗口、对话框和控件类(4)绘图和打印类(5)简单数据类型类(6)数组、列表和映射类(7)文件和数据库类(8)Internet和网络工作类(9)OLE类(10)调试和异常类对象连接及嵌入1、MFC中多数类和用户自定义子类的根类,是抽象基类。它提供了许多编程所需的公共操作对象的建立对象的删除运行时信息对象诊断输出串行化支持应用程序和线程支持类命令相关类文档类文档模板类视类(体系结构)框架窗口(体系结构)2、应用程序体系结构类3、窗口、

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论