关于WINDOWS的消息机制(50分)

  • 主题发起人 主题发起人 南宫吹云
  • 开始时间 开始时间

南宫吹云

Unregistered / Unconfirmed
GUEST, unregistred user!
先看一段文字:
“...
[red]如该解释所描述的一样,事件是串行的,每一个事件的处理都要等到前一个事件处理
完毕之后。当应用程序正在执行事件处理代码时(也就是说,当它没有处于等待事件状态
时),该应用程序的其他事件必须在该程序的消息队列中等待(除非应用程序使用多线程
处理,每个线程都有自己的消息队列)。[/red]当应用程序响应一条消息之后,返回等待
状态时,它将变成程序列表中的最后一位,等待着处理其他消息。在16位的WINDOWS中,
不能中断正在执行复杂事件处理程序的应用程序,其他应用程序必须等待。”
。。
  如何理解上面的文字?我定义了一个过程,在此过程中初始化一些信息,同时显示一
些状态信息,同时此过程不是在一个窗体中使用的,在另外的窗体中也可以调用。如何显
示这些状态信息是个问题,我想用消息机制,在这个过程中每处理完一段代码便postmessage
,又定义了一个过程处理接收此消息,在这个过程中将变量赋给label.caption,可是执行
的结果却总是显示最后处理的代码时的状态信息。以下是我定义的过程:
const
wm_info=wm_user+100;
...
public
{ Public declarations }
procedure prodataini(var info:string);
procedure wmrecieve(var msg:tmessage); message wm_info;

...
procedure TformSplash.wmrecieve(var msg: tmessage);
begin
//if msg.Msg=wm_info then
// begin
//msg.Result:=1;
labinfo.Caption:=s;
msg.Result:=1;
//end;
end;

消息是怎样工作的呢?我这样写是不是有错?该如何实现我的功能呢?
 
postMessage以后添加一个

Application.ProcessMessage实验一下,估计应该可以的。
 
几种发送消息的方法您搞明白了没有??
 
就是不明白才问的啊?
 
请各位大虾指教啊?我对WINDOWS的消息机制不太明白,不清楚它们是怎么工作的,能不能
讲一讲原理?
 
先告诉我添加上Application.ProcessMessage后是否起作用呀。[:)]
否则,讲错了多没面子呀[:D][:D][:D]
 
windows对发送给同一个窗口的消息会有一些特殊处理,比如窗口收到100个连续的
wm_paint消息,最后windows只把最后一个消息提供给我们的窗口,前面的其他99个
都被作为重复消息放弃了。你的这个程序应该是在这上面碰到问题了。我觉得你可以
在每次发送自己定制的wm_info后,立即发送一条其他的消息,比如窗口失效之类的。
 
to yzhishi:
你的方法可以,不过我改用sendmessage也可以了,能不能讲一下你的那条语句实际执行了
什么操作?
 
消息机制啊,我也是借花献佛了,^_^:
简单来说,windows不断的发送消息循环,当你要执行某一步操作时,
捕获windows消息,执行相应操作。一般ide都帮我们封装了底层消息。
只有我们需要修改某个消息处理时,就重载它。
还是看看书吧。
 
ok,问题已经解决了,有时间我还是多看看书吧,嘿嘿
 
后退
顶部