Windows编程基础和MFC课件

上传人:我*** 文档编号:143667908 上传时间:2020-09-01 格式:PPT 页数:32 大小:120.50KB
返回 下载 相关 举报
Windows编程基础和MFC课件_第1页
第1页 / 共32页
Windows编程基础和MFC课件_第2页
第2页 / 共32页
Windows编程基础和MFC课件_第3页
第3页 / 共32页
Windows编程基础和MFC课件_第4页
第4页 / 共32页
Windows编程基础和MFC课件_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《Windows编程基础和MFC课件》由会员分享,可在线阅读,更多相关《Windows编程基础和MFC课件(32页珍藏版)》请在金锄头文库上搜索。

1、第9章 Windows编程基础和MFC编程基础,利用Visual C+开发面向对象Windows应用程序有两种主要方法:一种是使用Windows提供的Windows API(Application Programming Interface,应用程序编程接口)函数,另一种是利用Microsoft提供的MFC(Microsoft Foundation Class,微软基础类库)类库。 Windows API是Windows系统和应用程序间的标准接口,为应用程序提供Windows支持的函数定义、参数定义和消息格式等。 MFC类库包括用来开发C+应用程序和Windows应用程序的一组类,这些类用来表

2、示窗口、对话框、设备上下文、公共GDI对象如画笔、调色板、控制框和其它标准的Windows部件,封装了大部分的Windows API函数。,第9章 Windows编程基础和MFC编程基础,9.1 Windows编程基础 9.2 MFC编程基础 习题,9.1 Windows编程基础,Windows系统支持多个应用程序同时执行,在界面形式上,它支持多个窗口同时活动。它的运行机制是“消息传递,事件驱动(message based,event driven)”。 1. 消息传递 2 事件驱动 3. Windows API 4. Windows数据类型与变量的命名规则,1. 消息传递,消息是一种报告有关

3、事件发生的通知,类似于DOS下的用户输入。Windows应用程序是由消息驱动的。Windows操作系统允许多个任务同时运行,应用程序的输入输出由Windows统一管理;Windows系统下每一个窗口都维护一个消息队列,操作系统接收和管理所有输入消息、系统消息,并把它们发送给相应窗口的消息队列。应用程序初始化完成后,进入消息循环,维护自己的消息队列,从中取出消息,对其进行处理。编写消息处理函数是Windows编程的主要工作之一。,Windows应用程序的消息来源有以下四种:,(1) 输入消息:包括键盘和鼠标的输入。这一类消息首先放在系统消息队列中,然后由Windows将它们送入应用程序消息队列中

4、,由应用程序来处理消息。 (2) 控制消息:用来与Windows的控制对象,如列表框、按钮、检查框等进行双向通信。当用户在列表框中改动当前选择或改变了检查框的状态时发出此类消息。这类消息一般不经过应用程序消息队列,而是直接发送到控制对象上去。 (3) 系统消息:对程序化的事件或系统时钟中断作出反应。一些系统消息,像DDE消息(动态数据交换消息)要通过Windows的系统消息队列,而有的则不通过系统消息队列而直接送入应用程序的消息队列,如创建窗口消息。 (4) 用户消息:这是程序员自己定义并在应用程序中主动发出的,一般由应用程序的某一部分内部处理。,Windows消息,Windows消息是在Wi

5、ndows文件中用宏定义的常数。消息常数名通常以WM开头,格式为WM_XXX。在winuser.h中,消息结构的定义如下: typedef struct tagMSG HWND hWnd;/ 指定消息发向的窗口句柄 UINT message; / 标识消息的消息值 WPARAMwParam; / 消息参数 LPARAMlParam; / 消息参数 DWORDtime;/ 消息进入队列的时间 POINTpt;/ 消息进入队列时鼠标指针的屏幕坐标 MSG,*PMSG,NEAR *NPMSG,FAR * LPMSG;,Windows程序和Windows消息处理的基本流程,2 事件驱动,Windows

6、系统使用事件驱动的编程模式。事件用来标识发生的某件事情,主要采用以下三种方式产生: (1) 通过输入设备,如键盘和鼠标。 (2) 通过屏幕上的可视对象,如菜单、工具栏按钮、滚动条和对话框上的控件。 (3) 来自Windows内部。,句柄,句柄是Windows编程的一个关键性的概念,编写Windows应用程序总是要和各种句柄打交道。所谓句柄,就是一个唯一的整数值,是一个4字节长的数值,用以标识许多不同的对象类型,如窗口、菜单、内存、画笔、画刷和文件等。由于Windows是一个多任务操作系统,它可以同时运行多个程序或一个程序的多个副本。Windows不仅使用句柄来管理实例,也用它来管理窗口、位图、

7、字体、元文件和图标等系统资源。常见的Windows对象句柄如表9.1所示,所有的句柄类型以H开头。,3. Windows API,Windows API是应用程序编程接口的英文缩写。它是大量函数加上数字常量、宏、结构、类型以及其它相关项的集合。在Windows应用程序中,调用API函数的方法同调用C库函数的方法相同,重要区别是C库函数的目标代码直接放到程序目标代码中,而API函数的目标代码则位于程序之外的某个动态链接库(DLL)中。 Windows API是包含在Windows操作系统中的,另外还有单独的驱动程序开发包(DDK),用来开发Windows驱动程序。因为Windows API函数本

8、身是用C语言编写的,所以C/C+编程可以很方便地利用计算机的底层资源,程序运行速度远远高于其它语言。,【例9.1】一个简单的Windows32应用程序。,#include int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPreinstance,LPSTR lpCmdLine,int nCmdshow) MessageBox(NULL,一个简单的Win32应用程序,例9.1,MB_OK); return 0; ,4. Windows数据类型与变量的命名规则,Windows API自定义了一些关键字,用来定义Windows函数中的有关参数和返

9、回值的大小和意义,通常把它们看作Windows的数据类型,常用的如表9.2所示。 在编程时,变量、函数的命名是一个极其重要的问题。好的命名方法使变量易于记忆且增加程序的可读性。Micorsoft采用匈牙利(Hungarian)命名法来命名Windows API函数和变量。匈牙利命名法为C+标识符的命名定义了一种非常标准化的方式,以下述两条规则为基础:,(1) 标识符的名字以一个或者多个小写字母开头,用这些字母来指定数据类型。表9.3列出了常用数据类型的标准前缀。 (2) 在标识符内,前缀之后就是一个或多个首字母大写的单词,这些单词明确指出源程序中那个对象的用途。例如,m_szPersonAdd

10、ress表示一个人住址的类数据成员,数据类型是字符串。,9.2 MFC编程基础,9.2.1 MFC编程概述 9.2.2 MFC的类层次 9.2.3 常用的MFC类 9.2.4 MFC应用程序的消息映射 9.2.5 一个最简单的MFC应用程序 9.2.6 典型的Windows应用程序,9.2.1 MFC编程概述(1/2),MFC类库作为C+与Windows的接口,建立在Win32应用程序编程接口API之上,封装了大多数的API函数,主要是API中与程序结构相关的部分和最常用的部分。MFC还封装了重要的Windows扩展,如COM,ActiveX,ODBC和Internet APIs,为这些难以编

11、程实现的功能提供了简便方法。 MFC中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK(Software Development Kit软件开发包)来说更为简单的方法。因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。Microsoft Visual C+提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于直观地设计用户界面;ClassWizard用来协助添加代码到框架

12、文件;最后进行编译,则通过类库实现了应用程序特定的逻辑。,在MFC编程中,入口函数WinMain()被封装在MFC的应用程序框架内,已经不用也不可以再定义为另一个WinMain()函数。 MFC编程最好的办法是使用MFC的应用程序向导工具AppWizard。AppWizard为程序员提供了一种快捷方便的工具来定制基于MFC的应用程序框架,程序员只需以此为基础,添加与修改程序代码来实现所需功能。,9.2.1 MFC编程概述(2/2),9.2.2 MFC的类层次,MFC中的类可划分为根类、应用程序结构类、窗口类、OLE类、数据库类等十个大类,在其中一些大类的基础上又派生出许多子类。 各个类的具体定

13、义参见文件Afxwin.h。 1. 根类 2. MFC应用程序结构类 3. 用户界面类 4. 一般用途的类 5. 集合类 6. 非CObject派生类,9.2.3 常用的MFC类,1字符串类CString CString类用于描述和处理VC+中的字符串,该类没有基类。CString对象的字符串的长度是可变的,如果在程序中改变了字符串的内容,CString类会自动调整所需内存。因此,使用CString类要比使用简单的字符数组和字符指针更安全。 #include CString类的数据成员均为私有成员,作为CString类对象的使用者,我们无需关心其具体设置,只需注意其方法(成员函数)和运算即可。

14、 表9.4为CString类的常用成员函数。 【例9.2】CString类的使用举例。,2CTime类,CTime类用来描述一个具体日期和时间,该类没有基类。 CTime类引入了ANSI time_t数据类型及与time_t相联系的运行时函数。CTime对象的值基于世界标准时间(UCT)或等价的格林威治时间(GMT)。本地时区由TZ环境变量控制。时间环境变量TZ由三部分组成:_daylight、_timezone和_tzname,其值由函数_tzset()设置。 和CTime相对应的是CTimeSpan类,该类标识时间间隔,即两个CTime对象的差。 CTime和CTimeSpan类不可派生。

15、由于没有虚函数,所以CTime和CTimeSpan对象只有4个字节,并且多数成员函数为内联函数。 CTime类的定义放在afx.h中,所以使用该类前应加上文件包含预处理命令: #include 表9.5为CTime类的常用成员函数。 【例9.3】CTime类的使用举例。,3CTimeSpan类,CTimeSpan类没有基类。 CTiemSpan类的定义放在afx.h中,所以使用该类前应加上文件包含预处理命令: #include 表9.6为CTime类的常用成员函数。 【例9.4】构造一个CTimeSpan对象,并获取其中的完整天数、小时数、分数和秒数。,4数组类,MFC的数组类创建和管理任何类

16、型数据的数组对象,这些数组对象和标准数组相似,但MFC可以在运行期动态地扩大或缩小数组对象,由于MFC的数组可以动态生成,所以用户可以不必考虑在常规数组使用中经常发生的内存浪费问题。 数组类包括CArray(模板类)、CByteArray(字节)、CDWordArray(32为双字)、CObArray(COject指针)、CPtrArray(void指针)、CUIntArray(无符号整数)、CWordArray(16位字)和CStringArray(CString对象)等,它们的父类均为CObject,但这些类相互之间没有继承关系。从类名即可知,每个类都对应特定的数据类型。这些数组类除了保存的数据类型不同外,其它完全相同。 表9.7为CArray类的常用成员函数。 【例9.5】数组类的使用举例。,5链表类,MFC提供三种链表类,用户可用其创建自己的链表。这些链表是CObList(对象链表)、CPtrList(指针链表)和CStringList(字符串链表),每个链表类都有类似的成员函数。 表9.8为链表类的常用成员函数。 【例9.

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号