windows-编程-复习纲要课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《windows-编程-复习纲要课件.ppt》由用户(ziliao2023)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- windows 编程 复习 纲要 课件
- 资源描述:
-
1、Fundamentals of Computers制作:刘晓翔JINAN University暨南大学电气信息学院Windows编程2023-5-31前言前言 什么是什么是 Windows API?有过编程经验的读者都应该知道,在传统应用程序中要完成某个有过编程经验的读者都应该知道,在传统应用程序中要完成某个功能,都是以功能,都是以函数调用函数调用的形式实现的,同样,的形式实现的,同样,Windows应用程序也是应用程序也是以函数调用的方式来通知操作系统执行相应的功能的。以函数调用的方式来通知操作系统执行相应的功能的。操作系统所能够完成的每一个特殊功能通常都有一个函数与其对操作系统所能够完成的
2、每一个特殊功能通常都有一个函数与其对应,也就是说,操作系统把它所能够完成的功能以函数的形式提供应,也就是说,操作系统把它所能够完成的功能以函数的形式提供给应用程序使用,应用程序对这些函数的调用就叫做系统调用,这给应用程序使用,应用程序对这些函数的调用就叫做系统调用,这些函数的集合就是些函数的集合就是Windows操作系统提供给应用程序编程的接口操作系统提供给应用程序编程的接口(Application Programming Interface),简称,简称Windows API。如如CreateWindow就是一个就是一个API函数,应用程序中调用这个函数,函数,应用程序中调用这个函数,操作系
3、统就会按照该函数提供的参数信息产生一个相应的窗口。这些操作系统就会按照该函数提供的参数信息产生一个相应的窗口。这些API函数都在函数都在windows.h中声明。中声明。Fundamentals of Computers制作:刘晓翔JINAN University暨南大学电气信息学院Windows编程2023-5-32什么是什么是 MFC?MFC英文全称为英文全称为Microsoft Foundation Classes(微(微软基础类库),是把软基础类库),是把Windows API进行封装的类库,它进行封装的类库,它是一个类的集合,通过覆盖是一个类的集合,通过覆盖Windows API,为
4、编程提供,为编程提供了一个了一个面向对象面向对象的界面。的界面。MFC使使Windows程序员能够利用程序员能够利用C+面象对象的特面象对象的特性进行编程。性进行编程。前言前言Fundamentals of Computers制作:刘晓翔JINAN University暨南大学电气信息学院Windows编程2023-5-33为什么要使用为什么要使用MFC?n 可重用性可重用性n 封装后使方法和属性更紧密的捆绑封装后使方法和属性更紧密的捆绑n 常用的功能自动化,减少编写代码的数量常用的功能自动化,减少编写代码的数量n 提供应用程序的框架结构提供应用程序的框架结构 框架结构提供了抽象功能,它远远超
5、出了框架结构提供了抽象功能,它远远超出了Windows API的功能。例如:的功能。例如:MFC的文档的文档/视图体系结构在视图体系结构在API上建造了一上建造了一个功能强大的基础结构,它把程序中数据的图形表示(或成个功能强大的基础结构,它把程序中数据的图形表示(或成为视图)与数据本身分开。这种抽象对为视图)与数据本身分开。这种抽象对API而言完全是陌生的,而言完全是陌生的,而且在而且在MFC框架结构之外或类似的类库中也不存在。框架结构之外或类似的类库中也不存在。前言前言Fundamentals of Computers制作:刘晓翔JINAN University暨南大学电气信息学院Windo
6、ws编程2023-5-34Windows 程序内部运行机制程序内部运行机制Windows编程模型编程模型事件驱动编程模型事件驱动编程模型以消息为基础,事件驱动之以消息为基础,事件驱动之WM_PAINTWM_KEYDOWNWM_LBUTTONDOWN消息响应消息响应消息响应消息响应消息响应消息响应DefWindowProc来源于操作系统的消来源于操作系统的消息息消息队列消息队列WinMain消息循环消息循环发送消息发送消息窗口过程窗口过程未处理的消息未处理的消息应用程序应用程序窗口窗口Fundamentals of Computers制作:刘晓翔JINAN University暨南大学电气信息学
7、院Windows编程2023-5-35Windows 程序内部运行机制程序内部运行机制小小知识点小小知识点“句柄句柄”句柄(句柄(HANDLE),资源的标识。),资源的标识。操作系统要管理和操作这些资源,都是通过句柄来操作系统要管理和操作这些资源,都是通过句柄来找到对应的资源。按资源的类型,又可将句柄细分成图找到对应的资源。按资源的类型,又可将句柄细分成图标句柄(标句柄(HICON),光标句柄(),光标句柄(HCURSOR),窗口),窗口句柄(句柄(HWND),应用程序实例句柄(),应用程序实例句柄(HINSTANCE)等等各种类型的句柄。操作系统给每一个窗口指定的一等等各种类型的句柄。操作系
8、统给每一个窗口指定的一个唯一的标识号即窗口句柄。个唯一的标识号即窗口句柄。Fundamentals of Computers制作:刘晓翔JINAN University暨南大学电气信息学院Windows编程2023-5-36Windows 程序内部运行机制程序内部运行机制编写编写Windows应用程序的要素应用程序的要素消息响应消息响应消息响应消息响应消息响应消息响应DefWindowProcWinMain消息循环消息循环发送消息发送消息窗口过程窗口过程未处理的消息未处理的消息应用程序应用程序1 1 入口函数入口函数WinMain2 2 创建窗口创建窗口3 3发送消息与消息循环发送消息与消息循
9、环4 4 窗口过程与消息响应窗口过程与消息响应消息消息窗口窗口Fundamentals of Computers制作:刘晓翔JINAN University暨南大学电气信息学院Windows编程2023-5-37 窗口类第二个成员变量窗口类第二个成员变量lpfnWndProclpfnWndProc指定了这一类型窗口的过指定了这一类型窗口的过程函数,也称程函数,也称回调函数回调函数。回调函数的原理是这样的,当应用程序收到给某一窗口的消息回调函数的原理是这样的,当应用程序收到给某一窗口的消息时(还记得前面讲过的消息通常与窗口相关的吗?),就应该调用时(还记得前面讲过的消息通常与窗口相关的吗?),就
10、应该调用某一函数来处理这条消息。这一某一函数来处理这条消息。这一调用过程不用应用程序自己来实施,调用过程不用应用程序自己来实施,而由操作系统来完成而由操作系统来完成,但是,回调函数本身的代码必须由应用程序,但是,回调函数本身的代码必须由应用程序自己完成。自己完成。对于一条消息,操作系统到底调用应用程序中的哪个函数(回对于一条消息,操作系统到底调用应用程序中的哪个函数(回调函数)来处理呢?操作系统调用的就是接受消息的窗口所属的类调函数)来处理呢?操作系统调用的就是接受消息的窗口所属的类型中的型中的lpfnWndProclpfnWndProc成员指定的函数。每一种不同类型的窗口都有成员指定的函数。
11、每一种不同类型的窗口都有自己专用的回调函数,该函数就是通过自己专用的回调函数,该函数就是通过lpfnWndProclpfnWndProc成员指定的。成员指定的。Windows 程序内部运行机制程序内部运行机制窗口过程函数窗口过程函数Fundamentals of Computers制作:刘晓翔JINAN University暨南大学电气信息学院Windows编程2023-5-38Windows 程序内部运行机制程序内部运行机制创建窗口创建窗口 创建一个完整的窗口需要经过下面四个操作步骤:创建一个完整的窗口需要经过下面四个操作步骤:Step1:设计一个窗口类;设计一个窗口类;Step2:注册窗口
12、类;注册窗口类;Step3:创建窗口;创建窗口;Step4:显示及更新窗口。显示及更新窗口。Fundamentals of Computers制作:刘晓翔JINAN University暨南大学电气信息学院Windows编程2023-5-39Windows 程序内部运行机制程序内部运行机制WM_PAINT Windows 把一个最小的需要重绘的正方形区域叫做把一个最小的需要重绘的正方形区域叫做“无效区无效区域域”。当。当 Windows 发现了一个发现了一个“无效区域无效区域“后,它就会向该应用后,它就会向该应用程序发送一个程序发送一个 WM_PAINT 消息,通知应用程序重新绘制窗口。消息,
13、通知应用程序重新绘制窗口。当窗口从无到有、改变尺寸、最小化后再恢复、被其他窗口遮当窗口从无到有、改变尺寸、最小化后再恢复、被其他窗口遮盖后再显示时,窗口的客户区都将变为无效。盖后再显示时,窗口的客户区都将变为无效。那么,应用程序是如何通知操作系统执行某个功能的呢?那么,应用程序是如何通知操作系统执行某个功能的呢?Fundamentals of Computers制作:刘晓翔JINAN University暨南大学电气信息学院Windows编程2023-5-310Windows 程序内部运行机制程序内部运行机制自行发送消息的两种方式自行发送消息的两种方式发送消息可以使用发送消息可以使用SendM
14、essage和和PostMessage函数。函数。SendMessage将消息将消息直接发送给窗口直接发送给窗口,并,并调用该窗口过程调用该窗口过程进行处理。在进行处理。在窗口过程对消息处理完毕后,该函数才返回。窗口过程对消息处理完毕后,该函数才返回。PostMessage函数函数将消息放入将消息放入与创建窗口的线程相关联的与创建窗口的线程相关联的消息队列消息队列后立后立即返回。即返回。Fundamentals of Computers制作:刘晓翔JINAN University暨南大学电气信息学院Windows编程2023-5-311虚函数与多态性虚函数与多态性 当当C+编译器在编译的时候,
15、发现基类的函数是虚函数,这编译器在编译的时候,发现基类的函数是虚函数,这个时候个时候C+就会采用迟绑定(就会采用迟绑定(late binding)的技术,在运行时,)的技术,在运行时,依据对象的类型(在示例程序中,我们传递的派生类对象的地址)依据对象的类型(在示例程序中,我们传递的派生类对象的地址)来确认调用的哪一个函数,这种能力就做来确认调用的哪一个函数,这种能力就做C+的的多态性多态性。在基类的函数前加上在基类的函数前加上virtual关键字,该函数则为关键字,该函数则为虚函数虚函数。虚。虚函数派生下去仍为虚函数,而且可以省略函数派生下去仍为虚函数,而且可以省略virtual关键字。关键字
16、。在派生类中重写该函数,在派生类中重写该函数,运行时将会根据指针实际所指的对运行时将会根据指针实际所指的对象的类型来调用相应的函数象的类型来调用相应的函数。如果对象类型是派生类,就调用派。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数。生类的函数;如果对象类型是基类,就调用基类的函数。掌握掌握C+Fundamentals of Computers制作:刘晓翔JINAN University暨南大学电气信息学院Windows编程2023-5-312纯虚函数与抽象类纯虚函数与抽象类 纯虚函数纯虚函数是指被标明为不具体实现的虚函数。纯虚函数可以是指被标明为不具体实现的
17、虚函数。纯虚函数可以让类先具有一个操作名称,而没有操作内容,让派生类在继承时让类先具有一个操作名称,而没有操作内容,让派生类在继承时再去具体地给出定义。凡是含有纯虚函数的类叫做再去具体地给出定义。凡是含有纯虚函数的类叫做抽象类抽象类。这种。这种可不能实例化对象,只能作为基类为派生类服务。可不能实例化对象,只能作为基类为派生类服务。注意:注意:派生类中必须实现基类的纯虚函数,否则,派生类也派生类中必须实现基类的纯虚函数,否则,派生类也变成了抽象类,不能实例化对象。变成了抽象类,不能实例化对象。纯虚函数多用在一些方法行为的实际上。在设计基类时,不纯虚函数多用在一些方法行为的实际上。在设计基类时,不
18、太好确定或将来的行为多种多样,而此行为又是必需的,我们就太好确定或将来的行为多种多样,而此行为又是必需的,我们就可以在基类的设计中,以纯虚函数来声明次中行为,而不具体实可以在基类的设计中,以纯虚函数来声明次中行为,而不具体实现它。现它。掌握掌握C+Fundamentals of Computers制作:刘晓翔JINAN University暨南大学电气信息学院Windows编程2023-5-313const的使用方法的使用方法const成员函数成员函数 任何不会修改数据成员的函数都应该声明为任何不会修改数据成员的函数都应该声明为const类型类型。如。如果在编写果在编写const成员函数时,不
19、慎修改了数据成员,或者调用了成员函数时,不慎修改了数据成员,或者调用了其它非其它非const成员函数,编译器将指出错误,这无疑会提高程序成员函数,编译器将指出错误,这无疑会提高程序的健壮性。的健壮性。Fundamentals of Computers制作:刘晓翔JINAN University暨南大学电气信息学院Windows编程2023-5-314类中的类中的Static成员变量与函数成员变量与函数静态成员函数与变量的特性静态成员函数与变量的特性n 静态成员函数和静态成员变量属于类本身,在类加载的时候静态成员函数和静态成员变量属于类本身,在类加载的时候(编译阶段),即为它们分配了空间,因此可
20、以通过(编译阶段),即为它们分配了空间,因此可以通过类名类名:函数名函数名或或类名类名:变量名变量名来访问。来访问。n 而非静态函数和非静态成员属于对象的方法和数据,也就是应而非静态函数和非静态成员属于对象的方法和数据,也就是应该首先产生类的对象,然后通过类的对象去引用。该首先产生类的对象,然后通过类的对象去引用。n 静态函数不属于某个具体的对象,也就是说,在还没有产生类静态函数不属于某个具体的对象,也就是说,在还没有产生类的任何一个具体对象时,静态函数就已经存在于程序的代码区了。的任何一个具体对象时,静态函数就已经存在于程序的代码区了。但这是类的非静态成员还没有分配内存空间,这样,在静态成员
21、但这是类的非静态成员还没有分配内存空间,这样,在静态成员函数中是没有办法对类非静态成员进行操作的。因此,函数中是没有办法对类非静态成员进行操作的。因此,在静态成在静态成员函数中只能访问静态成员变量,不能访问非静态成员函数和非员函数中只能访问静态成员变量,不能访问非静态成员函数和非静态成员变量静态成员变量。非静态成员函数中可以调用静态成员函数。非静态成员函数中可以调用静态成员函数。Fundamentals of Computers制作:刘晓翔JINAN University暨南大学电气信息学院Windows编程2023-5-315MFC框架程序剖析框架程序剖析MFC单文档界面程序初探(简答题)单
22、文档界面程序初探(简答题)n test.h、test.cpp应用程序类:应用程序类:CTestApp(由(由CWinApp继承而来),每一个继承而来),每一个MFC程程序有且仅有一个主应用程序类对象序有且仅有一个主应用程序类对象 theApp,它代表一个程序本体,它代表一个程序本体,用于管理和维护主应用程序用于管理和维护主应用程序n MainFrm.h、MainFrm.cpp主框架类主框架类CMainFrame(由(由CWnd继承而来),主框架是应用程序继承而来),主框架是应用程序的主体窗口,其他的窗口(如视类窗口、工具条、状态条)都依附的主体窗口,其他的窗口(如视类窗口、工具条、状态条)都依
23、附于主框架窗口(覆盖在它上面)。于主框架窗口(覆盖在它上面)。Fundamentals of Computers制作:刘晓翔JINAN University暨南大学电气信息学院Windows编程2023-5-316MFC框架程序剖析框架程序剖析MFC单文档界面程序初探(续)单文档界面程序初探(续)n testView.h、testView.cpp视图类:视图类:CTestView(由(由CWnd继承而来),负责管理和维护图形继承而来),负责管理和维护图形显示操作。显示操作。n testDoc.h、testDoc.cpp文档类:文档类:CTestDoc(由(由CDocumet继承而来),负责显示
24、数据的后继承而来),负责显示数据的后台管理和维护。台管理和维护。Fundamentals of Computers制作:刘晓翔JINAN University暨南大学电气信息学院Windows编程2023-5-317MFC框架程序剖析框架程序剖析MFC中的全局对象中的全局对象theApp初始化初始化CTestAPP对象,应用程序内存获得配置对象,应用程序内存获得配置调用基类调用基类CWinApp构造函数(在构造函数(在MFC源码目录的文件中源码目录的文件中AppCore.cpp),初始化完成程序运行时的一些初始化工作。),初始化完成程序运行时的一些初始化工作。注意:注意:由于由于theApp是
25、个全局对象,是个全局对象,所以所以CWinApp构造函数会在入构造函数会在入口函数口函数WinMain之前运行之前运行。Fundamentals of Computers制作:刘晓翔JINAN University暨南大学电气信息学院Windows编程2023-5-318图形操作图形操作设备描述表设备描述表DCn在在Windows平台下,窗口的所有图形操作都是利用平台下,窗口的所有图形操作都是利用DC来完来完成的。成的。n如果使用如果使用GetDC来得到来得到DC的句柄,在完成图形操作后,必的句柄,在完成图形操作后,必须调用须调用ReleaseDC来释放来释放DC所占用的资源,以避免内存泄漏。
展开阅读全文