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

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

click事件如果有注册方法,则调用该注册方法.

本文深入探讨了Windows系统中消息机制的工作原理,详细介绍了鼠标点击事件的处理流程:从用户操作开始,经由操作系统消息队列分配给相应控件,直至最终触发控件的Click事件并调用注册的方法。
702

被折叠的 条评论
为什么被折叠?



