游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1336|回复: 0

delphi win32 编程系列之一wxh zt

[复制链接]

1367

主题

1993

帖子

2118

积分

金牌会员

Rank: 6Rank: 6

积分
2118
发表于 2005-8-16 19:52:00 | 显示全部楼层 |阅读模式

A ----windows消息类型

TMsg  记录类型,在windows单元中定义

Type

TMsg=PackedRecord

          HWnd:HWND;//窗口句柄

          Message:UNIT;//消息常量标示符

          WParam:WPARAM;//32为消息的特定附加信息

          LParamPARAM;//32为消息的特定附加信息

          timeWORD;//消息创建时间

          pt:TPoint;//消息创建时的鼠标坐标位置

end;

win32定义的消息常量以VM开头,表示特定的消息,在delphi中Message单元定义了所有的windows消息。

消息的结构都是纪录,占用12个字节大小。


B---消息的产生到被相应的过程:

1-系统中发生了某个事件

2-windows将这个事件翻译成消息,放入消息队列

3-程序接受这个消息,并且存入TMsg中

4-程序将消息传递给相应的窗口

5-窗口响应消息,执行操作


C--delphi中的消息机制

在delphi中每个窗口和vcl组件固有一个消息接受例程MainWndProc-----定义在TWincontrol中的一个静态方法。

Procedure MainWndProc(Var Message:TMessage);他不直接处理消息,而是提交给WndProc来处理。

Procedure WndProc(Var Message:TMessage);Virtual;--在此过程中可以自己添加处理消息的代码。

WndProc调用Dispatch来分配消息(Dispatch在TObject根类中定义,他的参数必须是一个记录类型,并且必须有一个Cardinal类型的域)。

Dispatch将根据消息号码调用相应的处理消息的方法。

D--发送消息的方法

perform()--- SendMessage()--PostMessage()--

在程序中发送消息给自己,只需要定义一个消息常量(WM_USER+100到$7FFF范围内)。

然后声明和定义个处理消息的过程,比如:

。。

Private

Procedure doMyMessage(var Message:TMessage);message  VM_myMessage;

程序间传递消息-调用RegisterWindowMessage()

广播消息-Broadcast()

E--消息处理之重构WndProc

procedure TMyObject.WndProc(var message:TMessage);

begin

   //判断是否处理该消息

inherited WndProc(message);

//为处理的消息交给父类WndProc处理

end;
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-27 10:19

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表