哪位大虾给我这个菜鸟讲讲什么是消息映射?怎么用?(50分)

  • 主题发起人 主题发起人 rocknet
  • 开始时间 开始时间
你说的消息映射是否就是消息处理的意思?
如果是的话,就是指应用程序以某中方式响应windows消息,在Delphi中,
每个消息都有各自的过程,用于处理消息的过程必须满足以下3个条件:
1。必须是一个对象中的方法
2。必须有个var参数,变量的类形式TMessage或其他的特殊的消息纪录
3。声明这个过程时,必须使用message指示符,后面要跟上处理的消息的常量值
比如声明一个处理WM_PAINT消息过程的代码:
procedure WMPAINT (var Msg:TWMPaint);Message WM_Paint;
RFHP ZS
然后在Implementation部分实现过程
procedure TForm1.WMPaint(var Msg: TWmPaint);
begin
Beep;
inherited
//传递消息给祖先对象的处理过程。
end;
这样就完成了一个消息的处理过程
 
消息映射是VC中的概念,Delphi中好象没有消息映射这一说(我也不清楚)
 
还有 就是如何运用消息传递,我一直是 半懂不懂
 
我是看c++builder上的,我感觉跟delphi差不多,所以就来这里问了。。
 
这里有些历史渊源

1。 最早的windows 引入了消息机制来传递通讯,有效的进行程序模块间异步操作,
在windows 31也是多任务的关键。但是典型的消息处理程序是
winproc ();
{
case WM_PAINT :
...
case WM_TIMER :
...
case WM_XXXX :
...
default :
defaultDealer.;
}
导致了大量的代码集中,看起来不够结构化也不清晰。

2。 vc引入了两个宏
DECLARE_MESSAGES_MAP ,IMPLEMENT_MESSAGE_MAP 和其他辅助宏
巧妙的实现了消息和函数的对应关系,他的宏最终实现了一个复杂的消息分派连表结构,
在由类体系处理进行消息的分发。这样的结果就是你指定消息的名称和函数的对应关系
windows 和mfc 就可以将消息的处理交给这个函数,从而程序更加模块化,详细信息可以
在www.csdn.net/expert/jjhou 下载dissecting mfc ,免费。

vc里的这个就是正宗的消息映射的源头。

3. 只有delphi ,干脆连macro 都不要了,直接把消息处理和映射内建在vcl内,你只要在类
函数后指定一个消息名称就可以了,如
type MyMessgeDealer =TWinControl
MyPainterFunc(var msg:TMessages);message WM_PAINT;
end

MyPainterFunc(var msg:TMessages);message WM_PAINT;
begin
.. 在绘画。
end;
如果在delophi内使用消息,你不必要了解什么消息映射

你可以比较,尤其在大量处理消息的时候,那一个看起来更简洁,容易理解。
可以说这些努力主要就是为了编一个简单,易于理解的程序,但是为了这个好处,要学习一些不了解的新
东西,就是代价了。

 
谢谢大家!!!
 
后退
顶部