VCL架构问题,inherited 变的是什么法术。
添加一个按键事件,调试到此方法中
procedure TControl.WMLButtonDown(var Message: TWMLButtonDown);
begin
SendCancelMode(Self);
inherited; //为什么会调用 TWinControl.DefaultHandler(var Message)
if csCaptureMouse in ControlStyle then MouseCapture := True;
if csClickEvents in ControlStyle then Include(FControlState, csClicked);
DoMouseDown(Message, mbLeft, []);
end;
问题点数:20、回复次数:4Top
1 楼yuanscar(塑料树)回复于 2005-06-03 13:29:19 得分 8
当然了,每个类都有自己的函数框架表,执行inherited的时候,就到祖先的框架表中寻找继承的函数。
TWinControl就封装了对windows的各种消息的处理,这是一个对消息队列循环处理,当然要调用DefaultHandler(var Message),采用默认的方法来处理没有定义的消息了。
建议看李维的inside vclTop
2 楼g961681(技术庸人(情商太低))回复于 2005-06-03 14:14:36 得分 0
不解~Top
3 楼heluqing(鉴之小河〖劳累求充实〗)(vcl .net)回复于 2005-06-03 14:39:59 得分 7
inherited先到父类里面去找同名的,找不到的话就调用默认的,处理消息的话,当然就是DefaultHandlerTop
4 楼comanche(太可怕)回复于 2005-06-03 15:12:31 得分 5
这个没什么特别啊, 相当一个 c++ 宏吧
c++ 也可以这样写
class base
{
...
}
class derive :public base
{
typedef base inherited
}
使用到时 inherited.base_function_nameTop




