windows应用概述.ppt

上传人:牧羊曲112 文档编号:5576475 上传时间:2023-07-29 格式:PPT 页数:45 大小:264.50KB
返回 下载 相关 举报
windows应用概述.ppt_第1页
第1页 / 共45页
windows应用概述.ppt_第2页
第2页 / 共45页
windows应用概述.ppt_第3页
第3页 / 共45页
windows应用概述.ppt_第4页
第4页 / 共45页
windows应用概述.ppt_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《windows应用概述.ppt》由会员分享,可在线阅读,更多相关《windows应用概述.ppt(45页珍藏版)》请在三一办公上搜索。

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

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

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

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

5、息常用窗口按钮图标滚动条输出设备控制文件,常用句柄类型及其说明,HWND窗口句柄HDC设备环境句柄HBITMAP位图句柄HCURSOR光标句柄HICON图标句柄HFONT字体句柄HMENU菜单句柄HPEN画笔句柄HFILE文件句柄HBRUSH画刷句柄HINSTANCE当前实例句柄,消息,Windows应用程序利用Windows消息(Message)与应用程序及系统进行信息交换。消息的组成:消息号:由事先定义好的消息名标识字参数:用于提供消息的附加信息长字参数:用于提供消息的附加信息,typedef struct tagMSG HWND hwnd;窗口句柄,为null,则可检索所有驻留在消息队列

6、中的消息 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可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑

8、。,封装,构成MFC框架的是MFC类库,一种C+类库,具有明显封装性质的类库:(1)对Win32应用程序编程接口的封装:用一个C+Object来包装一个Windows Object。(2)对应用程序概念的封装:MFC把win32中许多有含义的处理序列封装起来,替程序员完成这些工作。另外,MFC提出了以文档-视图为中心的编程模式,MFC类库封装了对它的支持。(3)对COM/OLE特性的封装:MFC的OLE类封装了OLE API大量的复杂工作,这些类提供了实现OLE的更高级接口。(4)对ODBC功能的封装:以少量的能提供与ODBC之间更高级接口的C+类,封装了ODBC API的大量的复杂的工作,提

9、供了一种数据库编程模式。几个概念的解释,继承,MFC抽象出众多类的共同特性,设计出一些基类作为实现其他类的基础。其中,最重要的类是CObject和CCmdTarget。CObject是MFC的根类,绝大多数MFC类是其派生的,包括CCmdTarget。CObject 实现了一些重要的特性,包括动态类信息、动态创建、对象序列化、对程序调试的支持,等等。所有从CObject派生的类都将具备或者可以具备CObject所拥有的特性。CCmdTarget通过封装一些属性和方法,提供了消息处理的架构。MFC中,任何可以处理消息的类都从CCmdTarget派生。对每种性质不同的对象(窗口、应用程序、文档等)

10、,MFC都设计了一组类对这些对象进行封装,每一组类都有一个基类,从基类派生出众多更具体的类。例如:CWnd、CwinThread、Cdocument等。,虚拟函数和动态约束,MFC以“C+”为基础,必然支持虚拟函数和动态约束。但为了避免导致虚拟函数表过于臃肿(消耗内存、效率低下),MFC建立了消息映射机制,以富有效率、便于使用的手段解决消息处理函数的动态约束问题。通过虚拟函数和消息映射,MFC类提供了丰富的编程接口。程序员继承基类的同时,把自己实现的虚拟函数和消息处理函数嵌入MFC的编程框架。MFC编程框架将在适当的时候、适当的地方来调用程序的代码。,MFC的宏观框架体系,如前所述,MFC实现

11、了对应用程序概念的封装,把类、类的继承、动态约束、类的关系和相互作用等封装起来。这样封装的结果对程序员来说,是一套开发模板(或者说模式)。针对不同的应用和目的,程序员采用不同的模板。例如,SDI应用程序的模板,MDI应用程序的模板,规则DLL应用程序的模板,扩展DLL应用程序的模板,OLE/ACTIVEX应用程序的模板,等等。这些模板都采用了以文档-视为中心的思想,每一个模板都包含一组特定的类。典型的MDI应用程序的构成将在下一节具体讨论。,了解MFC机理的作用,内部机制有助于写出功能灵活而强大的程序。为了实现消息映射机制,MFC编程框架必须要保证首先得到消息,然后按既定的方法进行处理。为了实

12、现对DLL编程的支持和多线程编程的支持,MFC内部使用了特别的处理方法,使用模块状态、线程状态等来管理一些重要信息。MFC内部处理对程序员来说是透明的。,MFC特性总结,MFC封装了Win32 API,OLE API,ODBC API等底层函数的功能,并提供更高一层的接口,简化了编程。同时,MFC支持对底层API的直接调用。MFC提供了一个Windows应用程序开发模式,对程序的控制主要是由MFC框架完成,还覆盖大部分的功能,例如,预定义或实现了许多事件和消息处理。框架或者由其本身处理事件,不依赖程序员的代码;或者调用程序员的代码来处理应用程序特定的事件。MFC是C+类库,程序员通过使用、继承

13、和扩展适当的类来实现特定的目的。例如,继承时,应用程序特定的事件由程序员的派生类来处理,不感兴趣的由基类处理。实现这种功能的基础是C+对继承的支持,对虚拟函数的支持,以及MFC实现的消息映射机制。,MFC还很好地保持了程序的向下兼容性,是用来编写Windows应用程序的C+类集,提供了大量的基类供程序员根据不同的应用环境进行扩充,允许在编程过程中自定义和扩展应用程序中的类,较好的移植性,可移植于众多的平台,下图是MFC应用程序框架结构类的继承关系。,MFC应用程序框架结构类,1.CObject类 CObject是MFC类库的根类,它几乎描述了所有MFC类的一些公共特性,并且给所有由它派生出的类

14、提供了3种重要特性,即:串行化支持、运行时类信息支持以及诊断和调试支持。,2.CCmdTarget类 命令类CCmdTarget是CObject的子类,它是MFC库中所有具有消息映射属性的类的公共基类。从CCmdTarget派生的类能在程序运行时动态创建对象和处理命令消息。,3.CWinApp类 应用程序类CWinApp是CWinThread的子类,封装了初始化、运行、终止应用程序的代码。可以由此派生自己的应用类。,4.CWnd类 窗口类CWnd提供了MFC中所有窗口类的基本功能。从CWnd派生的类可以拥有自己的窗口,并对它进行控制。,5.CView类 视图类CView是CWnd类的子类。视图

15、类及其派生类用于管理框架窗口的客户区。6.CDocument类 文档类CDocument负责装载和维护文档。文档包括应用程序的工作成果或环境设置数据等,可以是程序需要保存的任何内容。,7.CFrameWnd类 CFrameWnd类是CWnd类的派生类。它是所有其他框架窗口类的基类,主要用来管理一个窗口,可以认为它取代了SDK应用程序中窗口处理函数WndProc()的地位。CFrameWnd类的对象是一个框架窗口,包括边框、标题栏、菜单、最大化按钮、最小化按钮和一个激活的视图。CFrameWnd类支持单文档界面,对于多文档界面,使用它的两个派生类CMDIFrameWnd和CMDIChildWnd

16、。CMDIFrameWnd类用于MDI的主窗口,CMDIChildWnd类用于MDI的子窗口。CFrameWnd类提供了若干个成员函数,用于获得和设置活动文档、视图、图文框、标题栏、状态栏等操作。,消息和事件,Windows是一个基于事件的消息(message)驱动系统,Windows应用程序是按照“事件消息处理”非顺序的机制运行的。所谓消息,就是用于描述某个事件发生的信息,而事件是对于Windows的某种操作,事件和消息密切相关,事件是因,消息是果,事件产生消息,消息对应事件。,消息的处理,所谓消息的处理,其实质就是事件的处理。当有某个事件(如单击鼠标、键盘输入和执行菜单命令等)发生时,Wi

17、ndows会根据具体的事件产生对应的消息,并发送到指定应用程序的消息队列。应用程序从消息队列中取出消息,并根据不同的消息进行不同的处理。,事件驱动程序设计,事件驱动程序设计,不是由事件的顺序来控制,而是由事件的发生来控制。事件特点:发生是随机的、不确定的,并没有预定的顺序,允许程序的的用户用各种合理的顺序来安排程序的流程。擅长领域:对于需要用户交互的应用程序来说,相比过程驱动方法无法替代的优点。,事件驱动过程,消息驱动模型,Windows消息机制,事件驱动是靠消息循环机制来实现的。事件驱动围绕着消息的产生与处理展开。一条消息是关于发生的事件的消息。Windows的消息机制实现:系统中所发生的任

18、何活动被当作事件来处理。对于所发生的每一个事件,Windows将其转换成消息的形式放在一个称为消息队列的内存区中。Windows的消息发送程序负责选择适合的对象,将消息队列中的消息发送到欲接受消息的对象上。,Windows消息机制,应用程序通过执行一段称为消息循环的代码来轮询应用程序的消息队列,从中检索出该程序要处理的消息,并立即消息发送到有关的对象上。MSGmsg;while(GetMessage(,消息类型,输入消息:对键盘和鼠标输入作反应。这类输入消息首先放在系统消息队列中,然后Windows将它们送入应用程序的消息队列,使消息得到处理。控制消息:用来与Windows的特殊控制对象,例如

19、,对话框、列表框、按钮等进行双向通信。这类消息一般不通过应用程序的消息队列,而是直接发送到控制对象上。,消息类型,系统消息:对程式化的事件或系统时钟中断作出反应。有些系统消息(例如,程序间进行数据交换)要通过Windows的系统消息队列。而有些系统消息,例如窗口的创建及删除等消息直接送入应用程序的消息队列。用户消息:通常由程序员创建的,消息只从应用程序的某一部分进入到该应用程序的另一部分而被处理,不会离开应用程序。用户消息经常用来处理选单操作:一个用户消息与选单中的一选项相对应,当它在应用程序队列中出现时被处理。,1标准Windows消息(1)键盘消息:与键盘某个键的动作相关联。常见的键盘消息

20、有WM_KEYDOWN、WM_KEYUP:非系统键的按下和释放。WM_CHAR:输入非系统字符时产生的消息。,消息的类别及其描述,(2)鼠标消息:涉及鼠标的单击、双击、拖动等。例如,WM_MOUSEMOVE、WM_RBUTTONDOWN、WM_LBUTTONDOWN、WM_LBUTTONDBLCLICK:鼠标移动时、右左键按下时、双击时产生的消息。,(3)窗口消息:窗口消息一般与创建窗口、绘制窗口、移动窗口和销毁窗口等动作有关。在MFC应用程序中,窗口消息是由视图类、窗口类及它们的派生类处理的。,2.控件消息 控件消息是指控件或其他子窗口向父窗口发送的WM_COMMAND消息。发送控件消息的控

21、件使用唯一的ID号来识别,使用控件类来操纵。从控件传给系统的消息,它的前缀的最后一个字符为N;由系统发送给控件的消息,其前缀的最后一个字符为M。3.命令消息 命令消息是由菜单项、工具栏按钮、快捷键等用户界面对象发出的WM_COMMAND消息。命令消息与其他消息不同,它可被更广泛的对象如文档、文档模板、应用程序对象、窗口和视图等处理。,MFC采用消息映射来处理消息。这种消息映射机制包括一组消息映射宏,用于把一个Windows消息和其消息处理函数联系起来。MFC应用程序框架提供了消息映射功能,所有从CCmdTarget类派生出来的类都能够拥有自己的消息映射。与MFC消息映射机制有关的宏有以下3个:

22、DECLARE_MESSAGE_MAP()宏、BEGIN_MESSAGE_MAP(MyClass,MybaseClass)宏和END_MESSAGE_MAP()宏。,MFC消息映射机制,首先在类定义的结尾用DECLARE_MESSAGE_MAP()宏来声明使用消息映射,该宏表示在为各个处理函数所写的类声明之后存在消息映射条目,这些函数是该类的成员函数。然后在类的实现源文件中用BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()宏来定义消息映射。MFC应用程序MESSAG_MAP消息映射的形式如下所示:,BEGIN_MESSAGE_MAP(the class,the bas

23、e class)/AFX_MSG_MAP(MyClass)/ClassWizard维护消息映射宏的标记 ON_./MFC预定义消息映射宏 ON_MESSAGE(message,memberFun)/用户自定义消息映射宏/AFX_MSG_MAPEND_MESSAGE_MAP(),使用方式,利用MFC编程时一般直接采用ClassWizard类向导添加消息和消息处理函数,而有时需要程序员通过在相应层次上定义消息和消息处理函数来实现自己的程序功能,这时需要自己定义消息名、分配ID值及完成消息映射的工作。Windows将所有的消息值分为4段:0 x00000 x03FF消息值范围段用于Windows系统

24、消息,0 x04000 x7FFF段用于用户自定义的窗口消息,0 x80000 xBFFF段为Windows保留值,0 xC0000 xFFFF段用于应用程序的字符串消息。,自定义消息处理,常量WM_USER(为0 x0400)与第一个自定义消息值相对应,用户必须为自己的消息定义相对于WM_USER的偏移值,利用#define语句直接定义自己的消息,如下所示:#define WM_USER WM_USER+3/自定义消息WM_USER 也可以调用窗口消息注册函数RegisterWindowMessage()来定义一个Windows消息,由系统分配消息一个整数值。该函数原型为:UINT RegisterWindowMessage(LPCTSTR lpString);其中参数lpString是要定义的消息名,调用成功后将返回该消息的ID值。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号