码迷,mamicode.com
首页 > 其他好文 > 详细

点击Button2后,执行MouseDown的过程

时间:2014-11-28 06:18:45      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:ar   使用   sp   for   on   ef   tt   学习   window   

Form1上放两个按钮Button1和Button2,默认输入焦点是Button1,现在点击Button2,产生WM_LBUTTONDOWN消息
procedure TForm1.Button2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
tag := 2000;
end;

其实这个过程使用Call Stack观察的很清楚,这里就是做学习笔记,并细化一下:
TButtonControl.WndProc(var Message: TMessage);
-->调用Windows.SetFocus(Handle);设置键盘输入焦点
-->inherite;
TWinControl.WndProc(var Message: TMessage);
-->调用IsControlMouseMsg(TWMMouse(Message)),发现Button2没有图形子控件响应
-->inherite;
TControl.WndProc(var Message: TMessage);
-->处理鼠标消息,但处理拖动模式。
-->然后一定加上csLButtonDown状态
-->Dispatch
TControl.WMLButtonDown
-->调用TControl.SendCancelMode(Sender: TControl); 最后发送CM_CANCELMODE
-->调用inherite,相当于调用TWinControl.DefaultHandler,因为没有TButton.DefaultHandler
-->调用CallWindowProc(FDefWndProc, FHandle, Msg, WParam, LParam);
-->调用DoMouseDown
TControl.DoMouseDown
-->调用MouseDown
TControl.MouseDown
-->调用FOnMouseDown(Self, Button, Shift, X, Y);

点击一下鼠标,同时还有WM_LBUTTONUP和WM_COMMAND消息产生。还有中间风格的变化,没有分析。

点击Button2后,执行MouseDown的过程

标签:ar   使用   sp   for   on   ef   tt   学习   window   

原文地址:http://www.cnblogs.com/findumars/p/4127611.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!