所有的窗口都是由Windows系统内部进行管理,它当然知道何时发送给哪个windows什么消息,从某个API函数例如:WindowFromPoint
从某个点获得该点所指的windows句柄,可以得知这个推断是正确的,windows内部创建了多少个窗口,每个窗口的坐标等参数,每个窗口对应了哪个消息处理函数,
都是由系统进行管理和维护,包括何时消毁,何时把它的Z坐标进行改变。
再来看这个API内部的运行机制,估计就是:进行遍历窗口,找到某个窗口的坐标范围是否在这个点中,如果没有找到,返回NULL,如果找到了,
继续查找该窗口中各个子控件的坐标是否在这个点的范围内,如果没有找到,就返回窗口的HWND,如果找到了,就返回子控件的HWND。
因为子控件也是窗口,当然,这只是估计,windows并不开发内核代码,所以我们只能猜测,如果系统是你写的,估计你也会采用这种方案。
因此,你点了窗口A,Windows并不会误认为你的鼠标跑到窗口B上了,不要忘了鼠标也是由windows系统通过驱动文件进行管理的,所以它会向你的窗口A消息过程发送消息,而不会发给B,换句话说,在发送消息前,Windows早就知道此消息应该发给谁了。