第一章 windows应用概述.ppt_第1页
第一章 windows应用概述.ppt_第2页
第一章 windows应用概述.ppt_第3页
第一章 windows应用概述.ppt_第4页
第一章 windows应用概述.ppt_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

1、Windows应用概述,Windows原理 Win32与MFC 事件驱动与消息驱动,Windows原理,Windows-操作系统 什么是操作系统? 两大流派-unix和windows Unixsolaris,bsd,linux和mac Windowsos/2和windows 多任务、界面化、工具全、资料多,Microsoft提供的编程接口,Win32 API是微软的操作系统Windows提供给开发人员的编程接口,它决定了我们开发的Windows应用程序的能力。 MFC( Microsoft Foundation Class Library)是微软为开发人员提供的类库,在某种意义上是对Win32

2、 API的封装,API,API函数 的功能,采用交互式方法时,可视化开发平台给出了许多选用的对象,程序员可选择所需对象并确定其属性,由此搭建起应用程序的“大框架”,并可根据需要进一步编写必要的细节代码段,最后构成完整的应用程序,编写Windows 程序相当一部分工 作是在创建对象和 为对象属性赋值,对象特征:具有规范形态和操作模式,Win32的来源,Microsoft 32位平台的应用程序编程接口(Application Programming Interface)。 Mircrosoft的所有32位平台都支持统一的API,包括函数、结构、消息、宏及接口。 基于Win32 API所开发的应用程

3、序可以充分挖掘Windows的32位操作系统的潜力,在能成功运行在各种平台上之外,也可以充分利用每个平台特有的功能和属性。(受平台限制),Win32 API的分类,窗口管理 窗口通用控制 Shell特性 图形设备接口 系统服务 国际特性 网络服务,Win32数据类型,HANDLE 32位无符号的整数,句柄 HINSTANCE 32位的无符号整数,实例句柄 HWND 32位的无符号整数,窗口句柄 HDC 设备描述背景的句柄 LONG 32位带符号整数 LPSTR 线性的32位字符串指针 WCHAR 16位的UNICODE字符,编写Windows应用程序之要点,(1)窗口的概念 (2)事件驱动的概

4、念 (3)句柄 (4)消息,窗口,系统管理应用程序的基本单位 应用程序与用户之间交互的接口环境 Win应用程序基本的操作单元 编写一个Windows应用程序首先应创建一个或多个窗口,随后应用程序的运行过程即是窗口内部、窗口与窗口之间、窗口与系统之间进行数据处理与数据交换的过程。,事件驱动,Windows程序设计是针对事件或消息的处理,消息是描述事件发生的信息(如按下鼠标或键盘) Windows程序的执行顺序取决于事件发生的顺序,程序的执行顺序是由顺序产生的消息驱动的,但是消息的产生往往并不要求有次序之分。 事件驱动编程方法-交互式程序。,句柄,句柄是一个4字节长的数值,用于标识应用程序中不同的

5、对象和同类对象中不同的实例 应用程序通过句柄访问相应的对象信息 常用窗口按钮图标滚动条输出设备控制文件,常用句柄类型及其说明,HWND窗口句柄HDC设备环境句柄 HBITMAP位图句柄HCURSOR光标句柄 HICON图标句柄HFONT字体句柄 HMENU菜单句柄HPEN画笔句柄 HFILE文件句柄HBRUSH画刷句柄 HINSTANCE当前实例句柄,消息,Windows应用程序利用Windows消息(Message)与应用程序及系统进行信息交换。 消息的组成: 消息号:由事先定义好的消息名标识 字参数 :用于提供消息的附加信息 长字参数:用于提供消息的附加信息,typedef struct

6、tagMSG HWND hwnd;窗口句柄,为null,则可检索所有驻留在消息队列中的消息 UINT message;消息值,由Windows.h头文件中的宏定义来标识 WPARAM wParam;包含有关消息的附加信息,不同消息其值有所不同 LPARAM lParam; DWORD time; 指定消息送至队列的时间 POINT pt;指定消息发送时屏幕光标的位置, 数据类型POINT也是一个结构体 MSG;,附加信息与具体 消息号的值有关, 在Win中消息用 结构体MSG表示,typedef struct tagPOINT LONG x; LONG y; POINT;,Windows常用消

7、息,窗口管理消息 初始化消息 输入消息 系统消息 剪贴板消息 控制处理消息 控制通知消息 滚动条通知消息 非用户区消息 MDI消息 DDE消息 应用程序自定义的消息,MFC-编程框架,MFC 中的各种类结合起来构成了一个应用程序框架,用以让程序员建立Windows下的应用程序,相对SDK来说更为简单的方法。 具体来说,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有 的东西填入这个轮廓。 Microsoft Visual C+提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑

8、器用于帮助直观地设计用户接口; ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑 。,封装,构成MFC框架的是MFC类库,一种C+类库,具有明显封装性质的类库: (1)对Win32应用程序编程接口的封装:用一个C+ Object来包装一个Windows Object。 (2)对应用程序概念的封装:MFC把win32中许多有含义的处理序列封装起来,替程序员完成这些工作。另外,MFC提出了以文档-视图为中心的编程模式,MFC类库封装了对它的支持。 (3)对COM/OLE特性的封装:MFC的OLE类封装了OLE API大量的复杂工作,这些类提供了实现O

9、LE的更高级接口。 (4)对ODBC功能的封装:以少量的能提供与ODBC之间更高级接口的C+类,封装了ODBC API的大量的复杂的工作,提供了一种数据库编程模式。 几个概念的解释,继承,MFC抽象出众多类的共同特性,设计出一些基类作为实现其他类的基础。其中,最重要的类是CObject和CCmdTarget。 CObject是MFC的根类,绝大多数MFC类是其派生的,包括CCmdTarget。CObject 实现了一些重要的特性,包括动态类信息、动态创建、对象序列化、对程序调试的支持,等等。所有从CObject派生的类都将具备或者可以具备CObject所拥有的特性。 CCmdTarget通过封

10、装一些属性和方法,提供了消息处理的架构。MFC中,任何可以处理消息的类都从CCmdTarget派生。 对每种性质不同的对象(窗口、应用程序、文档等),MFC都设计了一组类对这些对象进行封装,每一组类都有一个基类,从基类派生出众多更具体的类。例如:CWnd、CwinThread、Cdocument等。,虚拟函数和动态约束,MFC以“C+”为基础,必然支持虚拟函数和动态约束。但为了避免导致虚拟函数表过于臃肿(消耗内存、效率低下),MFC建立了消息映射机制,以富有效率、便于使用的手段解决消息处理函数的动态约束问题。 通过虚拟函数和消息映射,MFC类提供了丰富的编程接口。程序员继承基类的同时,把自己实

11、现的虚拟函数和消息处理函数嵌入MFC的编程框架。MFC编程框架将在适当的时候、适当的地方来调用程序的代码。,MFC的宏观框架体系,如前所述,MFC实现了对应用程序概念的封装,把类、类的继承、动态约束、类的关系和相互作用等封装起来。这样封装的结果对程序员来说,是一套开发模板(或者说模式)。 针对不同的应用和目的,程序员采用不同的模板。例如,SDI应用程序的模板,MDI应用程序的模板,规则DLL应用程序的模板,扩展DLL应用程序的模板,OLE/ACTIVEX应用程序的模板,等等。 这些模板都采用了以文档-视为中心的思想,每一个模板都包含一组特定的类。典型的MDI应用程序的构成将在下一节具体讨论。,

12、了解MFC机理的作用,内部机制有助于写出功能灵活而强大的程序。 为了实现消息映射机制,MFC编程框架必须要保证首先得到消息,然后按既定的方法进行处理。 为了实现对DLL编程的支持和多线程编程的支持,MFC内部使用了特别的处理方法,使用模块状态、线程状态等来管理一些重要信息。 MFC内部处理对程序员来说是透明的。,MFC特性总结,MFC封装了Win32 API,OLE API,ODBC API等底层函数的功能,并提供更高一层的接口,简化了编程。同时,MFC支持对底层API的直接调用。 MFC提供了一个Windows应用程序开发模式,对程序的控制主要是由MFC框架完成,还覆盖大部分的功能,例如,预

13、定义或实现了许多事件和消息处理。框架或者由其本身处理事件,不依赖程序员的代码;或者调用程序员的代码来处理应用程序特定的事件。 MFC是C+类库,程序员通过使用、继承和扩展适当的类来实现特定的目的。例如,继承时,应用程序特定的事件由程序员的派生类来处理,不感兴趣的由基类处理。实现这种功能的基础是C+对继承的支持,对虚拟函数的支持,以及MFC实现的消息映射机制。,MFC还很好地保持了程序的向下兼容性,是用来编写Windows应用程序的C+类集,提供了大量的基类供程序员根据不同的应用环境进行扩充,允许在编程过程中自定义和扩展应用程序中的类,较好的移植性,可移植于众多的平台,下图是MFC应用程序框架结

14、构类的继承关系。,MFC应用程序框架结构类,1.CObject类 CObject是MFC类库的根类,它几乎描述了所有MFC类的一些公共特性,并且给所有由它派生出的类提供了3种重要特性,即:串行化支持、运行时类信息支持以及诊断和调试支持。,2.CCmdTarget类 命令类CCmdTarget是CObject的子类,它是MFC库中所有具有消息映射属性的类的公共基类。从CCmdTarget派生的类能在程序运行时动态创建对象和处理命令消息。,3.CWinApp类 应用程序类CWinApp是CWinThread的子类,封装了初始化、运行、终止应用程序的代码。可以由此派生自己的应用类。,4. CWnd类

15、 窗口类CWnd提供了MFC中所有窗口类的基本功能。从CWnd派生的类可以拥有自己的窗口,并对它进行控制。,5.CView类 视图类CView是CWnd类的子类。视图类及其派生类用于管理框架窗口的客户区。 6.CDocument类 文档类CDocument负责装载和维护文档。文档包括应用程序的工作成果或环境设置数据等,可以是程序需要保存的任何内容。,7. CFrameWnd类 CFrameWnd类是CWnd类的派生类。它是所有其他框架窗口类的基类,主要用来管理一个窗口,可以认为它取代了SDK应用程序中窗口处理函数WndProc( )的地位。CFrameWnd类的对象是一个框架窗口,包括边框、标

16、题栏、菜单、最大化按钮、最小化按钮和一个激活的视图。CFrameWnd类支持单文档界面,对于多文档界面,使用它的两个派生类CMDIFrameWnd和CMDIChildWnd。CMDIFrameWnd类用于MDI的主窗口,CMDIChildWnd类用于MDI的子窗口。 CFrameWnd类提供了若干个成员函数,用于获得和设置活动文档、视图、图文框、标题栏、状态栏等操作。,消息和事件,Windows是一个基于事件的消息(message)驱动系统,Windows应用程序是按照“事件消息处理”非顺序的机制运行的。 所谓消息,就是用于描述某个事件发生的信息,而事件是对于Windows的某种操作,事件和消

17、息密切相关,事件是因,消息是果,事件产生消息,消息对应事件。,消息的处理,所谓消息的处理,其实质就是事件的处理。当有某个事件(如单击鼠标、键盘输入和执行菜单命令等)发生时,Windows会根据具体的事件产生对应的消息,并发送到指定应用程序的消息队列。应用程序从消息队列中取出消息,并根据不同的消息进行不同的处理。,事件驱动程序设计,事件驱动程序设计,不是由事件的顺序来控制,而是由事件的发生来控制。 事件特点:发生是随机的、不确定的,并没有预定的顺序,允许程序的的用户用各种合理的顺序来安排程序的流程。 擅长领域:对于需要用户交互的应用程序来说,相比过程驱动方法无法替代的优点。,事件驱动过程,消息驱

18、动模型,Windows消息机制,事件驱动是靠消息循环机制来实现的。 事件驱动围绕着消息的产生与处理展开。 一条消息是关于发生的事件的消息。 Windows的消息机制实现: 系统中所发生的任何活动被当作事件来处理。 对于所发生的每一个事件,Windows将其转换成消息的形式放在一个称为消息队列的内存区中。 Windows的消息发送程序负责选择适合的对象,将消息队列中的消息发送到欲接受消息的对象上。,Windows消息机制,应用程序通过执行一段称为消息循环的代码来轮询应用程序的消息队列,从中检索出该程序要处理的消息,并立即消息发送到有关的对象上。 MSGmsg; while (GetMessage

19、( ,消息类型,输入消息:对键盘和鼠标输入作反应。这类输入消息首先放在系统消息队列中,然后Windows将它们送入应用程序的消息队列,使消息得到处理。 控制消息:用来与Windows的特殊控制对象,例如,对话框、列表框、按钮等进行双向通信。这类消息一般不通过应用程序的消息队列,而是直接发送到控制对象上。,消息类型,系统消息:对程式化的事件或系统时钟中断作出反应。有些系统消息(例如,程序间进行数据交换)要通过Windows的系统消息队列。而有些系统消息,例如窗口的创建及删除等消息直接送入应用程序的消息队列。 用户消息:通常由程序员创建的,消息只从应用程序的某一部分进入到该应用程序的另一部分而被处

20、理,不会离开应用程序。用户消息经常用来处理选单操作:一个用户消息与选单中的一选项相对应,当它在应用程序队列中出现时被处理。,1标准Windows消息 (1)键盘消息:与键盘某个键的动作相关联。常见的键盘消息有WM_KEYDOWN、WM_KEYUP:非系统键的按下和释放。WM_CHAR:输入非系统字符时产生的消息。,消息的类别及其描述,(2)鼠标消息:涉及鼠标的单击、双击、拖动等。例如,WM_MOUSEMOVE、WM_RBUTTONDOWN、WM_LBUTTONDOWN、WM_LBUTTONDBLCLICK:鼠标移动时、右左键按下时、双击时产生的消息。,(3)窗口消息:窗口消息一般与创建窗口、绘

21、制窗口、移动窗口和销毁窗口等动作有关。在MFC应用程序中,窗口消息是由视图类、窗口类及它们的派生类处理的。,2.控件消息 控件消息是指控件或其他子窗口向父窗口发送的WM_COMMAND消息。发送控件消息的控件使用唯一的ID号来识别,使用控件类来操纵。从控件传给系统的消息,它的前缀的最后一个字符为N;由系统发送给控件的消息,其前缀的最后一个字符为M。 3.命令消息 命令消息是由菜单项、工具栏按钮、快捷键等用户界面对象发出的WM_COMMAND消息。命令消息与其他消息不同,它可被更广泛的对象如文档、文档模板、应用程序对象、窗口和视图等处理。,MFC采用消息映射来处理消息。这种消息映射机制包括一组消

22、息映射宏,用于把一个Windows消息和其消息处理函数联系起来。MFC应用程序框架提供了消息映射功能,所有从CCmdTarget类派生出来的类都能够拥有自己的消息映射。 与MFC消息映射机制有关的宏有以下3个:DECLARE_MESSAGE_MAP( )宏、BEGIN_MESSAGE_MAP(MyClass, MybaseClass)宏和END_MESSAGE_MAP( )宏。,MFC消息映射机制,首先在类定义的结尾用DECLARE_MESSAGE_MAP( )宏来声明使用消息映射,该宏表示在为各个处理函数所写的类声明之后存在消息映射条目,这些函数是该类的成员函数。 然后在类的实现源文件中用BEGIN_MESSAGE_MAP( )和END_MESSAGE_MAP( )宏来定义消息映射。MFC应用程序MESSAG_MA

温馨提示

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

评论

0/150

提交评论