消息机制的一句话搞不懂(0分)

  • 主题发起人 主题发起人 cjtmh
  • 开始时间 开始时间
C

cjtmh

Unregistered / Unconfirmed
GUEST, unregistred user!
在看开发指南的时候遇到一点问题,消息机制这一章说的一句话:当在处理一个消息时, Wi n d o w s总是指望做一些事情。V C L已经内置了基本的消息处理功能,必须要做的就是调用 i n h e r i t e d。可以这样认为:写一个消息处理过程是为了做一些你要做的事情,调用 i n h e r i t e d是为了做一些Wi n d o w s要做的事情。这句话什么意思呢?
 
不懂,暑假看了侯捷的MFC觉的头晕
 
你多写写继承就明白了,还有搞清楚override,overload之间的区别就明白了;
 
就是说Windows对固定的消息有固定的处理方式,比如WM_CLOSE就是关闭窗体一样,调用Inherited就是为了让Windows关闭窗体,如果你不调用就相当于你自己的窗体函数没有处理那个消息,当用户点关闭时就没用了.

例如: 下面是拦截最小化消息的,(但任务栏的最小化无法栏截)
窗体Form1过程内:
private
procedure WMCOMM(var msg: TMessage);message WM_SYSCOMMAND;

procedure TForm1.WMCOMM(var msg: TMessage);
begin

if Msg.WParam = SC_MAXIMIZE then
Self.Caption := '最大化!'
else
if Msg.wParam = SC_MINIMIZE then
begin
Self.Caption := '最小化!';
Exit;
end;
Inherited;
end;
 
我知道inherited是调用父类的代码,但是父类的代码是空的,调不调用又有什么关系,但为什么说调用inherited是作一些windows要做的事?可能我很笨,唉。
附上代码:unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
private
{ Private declarations }
procedure WMPaint(var msg: TWMPaint);message WM_PAINT;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

procedure TForm1.WMPaint(var msg: TWMPaint);
begin
Beep;
inherited
//加不加有什么不同,照样执行
end;

{$R *.dfm}

end.
 
inherited;是为了处理Windows的消息,如果不加你就无法在之后的代码中截取消息了。
 
应该说是Windows无法处理用户发出的消息了。
 
procedure TForm1.WMPaint(var msg: TWMPaint);
begin
Beep;
inherited
//加不加有什么不同,照样执行
end;

你不加的話,如果哪個類從你的TForm1繼承的話就無法 WM_PAINT消息執行以前的代碼,
如果你的父類在 WM_PAINT消息處理過程裡面有什麼畫圖的語句就無法實現了,
 
谢谢大哥
 
后退
顶部