[转载]Delphi中消息经验总结.

本文介绍了在Delphi中处理Windows消息的方法,包括如何使用VCL进行封装,以及如何编写自己的控件来截获或过滤消息。还讨论了不同消息类型如VCL内部消息、通知消息和用户自定义消息的区别,并解释了CreateHandle、PostMessage和SendMessage等关键函数的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   在Delphi中,大多数情况下Windows的消息被封装在VCL的事件中,我们只需处理相应的VCL事件就可以了,但如果我们需要编写自己的控件、截获或过滤消息就必须深入研究Win32的消息处理机制。前面我们提到的消息都是标准的Windows消息(WM_X),除此之外还有VCL内部消息、通知消息和用户自定义消息。用户也可以自己定义消息、给自己发送消息和编写消息处理过程。VCL消息处理机制。这样在Windows本身对消息处理之前,就会响应OnMessage事件的处理过程,它优于任何消息处理,而且只接收登记的消息,即前面所述的由PostMessage发送的消息。
  
  永远记住,无论你是用 SDK 还是借用 VCL 来创建窗口,都要遵循 Windows 的游戏规则,即先注册窗口类,然后再创建窗口实例,在消息循环中写实现代码。但 CreateHandle 只是个包装函数,它首先调用 TWinControl.CreateWnd 来创建窗口,CreateWnd 是一个重要的过程,它先调用 TWinControl.CreateParams 设置创建窗口的参数,通过这些参数调用 RegisterClass API 注册窗口类,CreateWnd 然后调用 TWinControl.CreateWindowHandle,CreateWindowHandle 才是真正调用 CreateWindowEx API 创建窗口实例的函数。
  
  PostMessage不等待,直接把消息发出去 SendMessage发送并等待对方处理消息 TranslateMessage把虚拟艰消息翻译成字符消息 DispatchMessage派发消息 Tmessage---异步方式发送消息,不判断消息是否执行或被丢弃 Sendmessage---同步方式发送消息,等待消息被消息接收端接受后返回。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值