Delphi Windowd消息.ppt_第1页
Delphi Windowd消息.ppt_第2页
Delphi Windowd消息.ppt_第3页
Delphi Windowd消息.ppt_第4页
Delphi Windowd消息.ppt_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、Windowd消息,1 什么是消息? 消息是Windows对应用程序发送的有关“发生了某种 事件”的通知,比如点击鼠标,拖动窗口 Windows以Record的形式发送消息给应用程序。记 录中包括诸如事件的类型以及对这个消息附加的特定信 息。例如,对于单击鼠标所产生的消息来说,这个记录 中包含了单击鼠标时的坐标。这个记录类型叫做T M s g,,TMsg在Wi n d o w s单元中是这样声明的: t y p e TMsg = packed record hwnd: HWND; / /窗口句柄 message: UINT; / /消息常量标识符 wParam: WPA R A M ; / 3

2、2位消息的特定附加信息 lParam: LPA R A M ; / 32位消息的特定附加信息 time: DWORD; / /消息创建时的时间 pt: TPoint; / /消息创建时的鼠标位置 e n d ;,TMsg各成员的含义,hwnd 32位的窗口句柄。窗口可以是任何类型的 屏幕对象,因为Win32能够维护大多数可 视对象的句柄(窗口、对话框、按钮、编辑 框等)。 message 用于区别其他消息的常量值,这些常量 可以是Windows单元中预定义的常量,也 可以是自定义的常量 wParam 通常是一个与消息有关的常量值,也可 能是窗口或控件的句柄。 lParam 通常是一个指向内存中

3、数据的指针。 由于wParam 、 lParam和Pointer都是3 2位的因 此,它们之间可以相互转换。,消息的类型,Win32API为每个Windows消息定义了一个常量, 这些常量用于TMsg记录中的message字段。在 Delphi的Message单元中为我们预定义好了所有的 这些常量,其中大部分消息常量可以到在线帮助 中找到解释。这些常量都已“WM”开头,指的是 Windows Message。下表给出了一些常用的 Windows消息。,Windows消息系统的工作方式,Delphi的消息系统,VCL的Form中内建了消息循环,因此不用考 虑如何获得消息并分发消息到指定窗口。 D

4、elphi把Windows的TMsg记录中的信息映射到 一个通用的Tmessage中,该记录比TMsg的信息 少,由于Delphi已经处理了其他的TMsg字段 Tmessage中Result字段表示消息给Windows的 返回值,消息的处理,某个过程要成为消息处理过程需要满足三个条件 该过程必须是某个对象的方法 该过程必须有一个引用(var)的Tmessage或其他特定消息记录类型参数 该过程必须使用message指示符,指示符后面是希望处理的消息常量 下面是一个处理WM_PAINT消息的例子: WM_PAINT例子,消息处理:并非无约定 Windows消息处理不是无约定的。当我们决定自己处理

5、某个消息时,Windows希望我们在处理消息后在执行一些Windows期望的动作,这就是上例中我们为什么调用inherited的原因 为Result消息值赋值 当消息需要返回值时,通过Result返回。例如WM_CTLCOLOR需要返回一个画刷句柄 OnMessage事件 可以通过使用Tapplication的OnMessage事件来处理消息。通过指派一个过程给OnMessage,当应用程序从消息队列中取出一个消息,并准备处理该消息时,就调用这个过程,OnMessage的唯一限制是只能从消息队列中取出的消息,而不能处理应用程序中直接发给Windows窗体过程的消息,发送自己的消息,Delphi

6、主要提供了下面几种途径在应用程序间发 送消息 Perform()方法 VCL为所有的Tcontrol派生类提供了Perform()方法,给任何已知对象实例的窗体或控件对象发送消息。Perform()是同步调用。 SendMessage()方法 同步调用,消息直接发往目的窗口,消息处理完毕菜返回 PostMessage()方法 异步调用,消息发送给Windows消息队列,然后立即返回。,非标准消息,通知消息 当窗口的子控件发生某种事件时,如果该事件需要通知父窗口,那么就发送此类消息。通知消息只发生在标准Windows控件中和Windows通用控件中。下表是标准的Windows控件的通知消息,内部VCL消息,VCL中有许多内部消息和通知消息,对Delphi组件开 发人员比较有用。这些消息通常以CM_开头(代表 component message)或CN_开头(代表component notification) 例如通过处理定制消息CM_MOUSEENTER和 CM_MOUSELEAVE来检查鼠标是否进入或离开 某个控件的区域。 一个例子:当鼠标进入控件表面区域时,控件面板变 成白色,当鼠标离开时,控件面板变回clBtnFace色。 CustMessage,用户自定义消息,自定义消息的基本步骤:,书上p226,Acessmessages Delphi

温馨提示

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

评论

0/150

提交评论