windows消息机制与ASP.net winform控件消息传递之鼠标点击click事件

window系统是一个消息驱动的系统, windows操作系统本身有自己的消息队列,消息循环,它捕捉键盘,鼠标的动作生成消息,并将这个消息传给应用程序的消息队列。
当用户用鼠标click桌面时,其实用户是不能直接接触到某个控件的。表面上看,的确是用户用鼠标点击了一下按钮。而实际上,当用户按下鼠标左键的时候是通过鼠标向Windows操作系统发送了一个“左键单击[x,y]点”消息,然后Windows再根据[x,y]的位置把这个消息分配(路由)给应该接收它的控件——这就是Windows的消息传递/路由机制。
同理,当你移动鼠标的时候,看似好像指针在随你的意愿移动,而实际上是你的鼠标在以每秒钟几百次的频率把当前位置汇报给Windows操作系统,然后Windows再把一个漂亮的指针“画”在屏幕上给你看。
然而这些内容对于C#程序员都是不可见的——都被封装成了“事件”。因此,从Windows系统的机理上讲,事件机制就是对Windows消息传递机制的包装。

从windows消息机制来看,鼠标点击的流程是这样:
用户在桌面点击了鼠标,根据前面所述,windows系统根据鼠标移动的轨迹算出鼠标现在的坐标,win系统根据坐标位置把click消息告知当前活动窗口程序消息循环.
windows消息机制与ASP.net winform控件消息传递之鼠标点击click事件_第1张图片

当前窗口消息循环获取到click消息后则自动调用该控件control类对象的onclick函数(控件对象的onclick函数是对control类onclick的重写,但我们看不到如何自动调用onclick函数这个过程),在onclick函数体内触发该对象的click事件。
这里写图片描述

click事件如果有注册方法,则调用该注册方法.
这里写图片描述

你可能感兴趣的:(windows消息机制与ASP.net winform控件消息传递之鼠标点击click事件)