代码第一次在系统队列首部找到事件时,并不会马上将其删除。因为鼠标和键盘事件只是队列中的两种事件,而代码会分枝(译者注:类似于c语言中的switch语句)并单独处理每一种类型的事件。
处理系统队列中的鼠标事件
下面是处理鼠标事件的步骤。
1. 首先,将计算该事件屏幕坐标的相应窗体。此计算(调用窗体点击测试)以桌面窗体开始,从头至尾的扫描细统中的每一个窗体(包括子窗体),直到找到一个包含这个鼠标坐标点的窗体,并且这个窗体没有任何同样包含这个坐标点的子窗体。
图2. 鼠标事件的窗体点击测试
例如:如果图2中的箭头代表当前的鼠标位置,任何的鼠标行为,像单击鼠标键,将生成一个会在b窗体中产生消息的事件。
2. 如果一个窗体使用setcapture捕获鼠标,那么“系统队列扫描”代码将通过普通的点击测试,并将所有的鼠标消息返回到捕获的窗体。例如:如果在图2 中的a窗体调用了setcapture,则在箭头所指位置的所有鼠标行为,将产生窗体a中的消息,而不是窗体b。