DelphiWindowd消息探索.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Windowd消息 1 什么是消息? 消息是Windows对应用程序发送的有关“发生了某种 事件”的通知,比如点击鼠标,拖动窗口 Windows以Record的形式发送消息给应用程序。记 录中包括诸如事件的类型以及对这个消息附加的特定信 息。例如,对于单击鼠标所产生的消息来说,这个记录 中包含了单击鼠标时的坐标。这个记录类型叫做T M s g, TMsg各成员的含义 hwnd 32位的窗口句柄。窗口可以是任何类型的 屏幕对象,因为Win32能够维护大多数可 视对象的句柄(窗口、对话框、按钮、编辑 框等)。 message 用于区别其他消息的常量值,这些常量 可以是Windows单元中预定义的常量,也 可以是自定义的常量 wParam 通常是一个与消息有关的常量值,也可 能是窗口或控件的句柄。 lParam 通常是一个指向内存中数据的指针。 由于wParam 、 lParam和Pointer都是3 2位的因 此,它们之间可以相互转换。 消息的类型 Win32API为每个Windows消息定义了一个常量, 这些常量用于TMsg记录中的message字段。在 Delphi的Message单元中为我们预定义好了所有的 这些常量,其中大部分消息常量可以到在线帮助 中找到解释。这些常量都已“WM”开头,指的是 Windows Message。下表给出了一些常用的 Windows消息。 Windows消息系统的工作方式 Delphi的消息系统 VCL的Form中内建了消息循环,因此不用考 虑如何获得消息并分发消息到指定窗口。 Delphi把Windows的TMsg记录中的信息映射到 一个通用的Tmessage中,该记录比TMsg的信息 少,由于Delphi已经处理了其他的TMsg字段 Tmessage中Result字段表示消息给Windows的 返回值 消息的处理 某个过程要成为消息处理过程需要满足三个条件 该过程必须是某个对象的方法 该过程必须有一个引用(var)的Tmessage或其他特定消息记录类型参数 该过程必须使用message指示符,指示符后面是希望处理的消息常量 下面是一个处理WM_PAINT消息的例子: WM_PAINT例子 消息处理:并非无约定 Windows消息处理不是无约定的。当我们决定自己处理某个消息时,Windows希望我们在处理消息后在执行一些Windows期望的动作,这就是上例中我们为什么调用inherited的原因 为Result消息值赋值 当消息需要返回值时,通过Result返回。例如WM_CTLCOLOR需要返回一个画刷句柄 OnMessage事件 可以通过使用Tapplication的OnMessage事件来处理消息。通过指派一个过程给OnMessage,当应用程序从消息队列中取出一个消息,并准备处理该消息时,就调用这个过程,OnMessage的唯一限制是只能从消息队列中取出的消息,而不能处理应用程序中直接发给Windows窗体过程的消息 发送自己的消息 Delphi主要提供了下面几种途径在应用程序间发 送消息 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 用户自定

文档评论(0)

***** + 关注
实名认证
文档贡献者

我是自由职业者,从事文档的创作工作。

1亿VIP精品文档

相关文档