DELPHI5开发人员指南(十三).pdf

  1. 1、本文档共52页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
下载 第1 3章 核 心 技 术 本章内容: • 高级消息处理 • 防止同时出现多个应用程序实例 • 使用D e l h p i 的B A S M • 使用挂钩 • 使用C / C + + 的O B J文件 • 使用C + +类 • 替换 • 获得包的信息 本章将介绍一些在D e l p h i 中的高级编程技术。在这一章里,你将更直接地接触到Win32 API ,并且 要介绍一些V C L没有提供的功能。稍后,你将学习到这些概念:窗口过程、多实例、窗口挂钩以及在 D e l p h i与C + +之间共享代码。 13.1 高级消息处理 在第5章“理解Wi n d o w s消息”中,我们曾讲过窗口过程是一种函数,当一个窗口收到消息时由 Wi n d o w s来调用它。在每个应用程序对象中都包含一个窗口过程,应用程序对象利用它来接收所有被 发送到应用程序的消息。TA p p l i c a t i o n类利用O n M e s s a g e ( )事件通知消息的到来。 TA p p l i c a t i o n . O n M e s s a g e 只在应用程序的消息队列接收到一个消息时才被触发 (在第5章中有关于消 息的讨论) 。一般应用程序接收到的消息是与窗口管理有关的消息 (例如W M _ PA I N T和W M _ S I Z E ) ,或由 P o s t M e s s a g e ( ) 、P o s t A p p M e s s a g e ( )或B r o a d c a s t S y s t e m M e s s a g e ( )等A P I 函数发送出的消息。但是,由于 Wi n d o w s或S e n d M e s s a g e ( )有可能会绕过消息队列直接将消息发送给窗口过程。当发生这种情况时, TA p p l i c a t i o n . O n M e s s a g e就不会被触发。 13.1.1 子类化 为了知道什么时候一个消息被发送到应用程序,必须用自己的窗口过程代替 A p p l i c a t i o n 的窗口过 程。当在自己的窗口过程中对消息处理完后,要把消息再传递给原窗口过程。这样的过程就叫做子类 化窗口。 可以传递一个常量 G W L _ W N D P R O C给Win32 API 函数S e t Wi n d o w L o n g ( )来指定一个新的窗口过 程。窗口过程可以是以下两种格式 :一是利用A P I定义;二是利用D e l p h i使窗口方法作为窗口过程。 注意 当子类化一个VCL窗口的窗口过程时,可能由于窗口的句柄被重复创建而导致应用程序 失败。使用子类化技术一定要小心。一种更为安全的使用方法是使用 A p p l i c a t i o n . H o o k M a i n - Window() 。我们将在后面讨论它。 1. 一个Win32 API 的窗口过程 一个A P I 的窗口过程必须像这样声明: 第1 3章 核 心 技 术 3 9 3 下载 声明中,H a n d l e参数用于标识目标窗口;M s g是一个消息;w P a r a m 、l p P a r a m参数含有消息的附加 信息。函数的返回值要依靠收到的消息确定。需要特别注意,此函数必须用 s t d c a l l作为调用约定。 可以这样使用S e t Wi n d o w L o n g ( )函数给应用程序的窗口指定窗口过程: 在此调用后,返回一个指针类型的 W P r o c指向旧的窗口过程。对这个值的保留是很必要的,因为 有些消息可能需要传递给旧的窗口过程。下面是一个窗口过程的实现示例: 清单 1 3 - 1列出了S c W n d P r c . p a s单元的代码,程序中利用自己的窗口过程代替了 A p p l i c a t i o n对象的 窗口过程来处理自定义的消息D D G M _ F O O M S G 。

文档评论(0)

***** + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档