给人的感觉是,我点击这个界面了,界面有了动作,肯定是应用程序先收到。
但是按事件驱动的原理:
觉得应该是系统先获取这些事件。
点击鼠标,输入字符--操作系统捕获,写入系统消息队列??--操作系统写入应用程序消息队列?
--应用程序检测、处理消息,作出响应(多窗口的话,再根据窗口句柄,对应的窗体进行响应)这样的理解对吗?操作系统怎么知道我点击的消息发给A程序而不会误发到B程序?
但是按事件驱动的原理:
觉得应该是系统先获取这些事件。
点击鼠标,输入字符--操作系统捕获,写入系统消息队列??--操作系统写入应用程序消息队列?
--应用程序检测、处理消息,作出响应(多窗口的话,再根据窗口句柄,对应的窗体进行响应)这样的理解对吗?操作系统怎么知道我点击的消息发给A程序而不会误发到B程序?
操作系统怎么知道我点击的消息发给A程序而不会误发到B程序? 这个是根据句柄来的,既Handle
思考:假如还有个程序B,如果A,B界面有重叠,如果操作系统不从中间协调,完全交给两个界面处理,他们岂不是会打架?而如果操作系统全权代理,率先先得到消息,他怎么知道我点击鼠标是在A还是在B程序?难道他要时刻记得当前谁在最前面吗?时刻判断这个区域归哪个程序管吗?
我就奇怪了,操作系统怎么会知道我点的程序A对应的句柄?他怎么不把程序B的句柄写入消息呢?
清楚点比较好,Delphi易学易入门,但是要提高,必须深入理解系统才行。
操作系统怎么知道我点击的消息发给A程序而不会误发到B程序? 这个是根据句柄来的,既Handle不要想为什么是这样,是别人设计出来的,等学的多了懂得多了你自然明白为什么了。
操作系统是很复杂的,不是说让谁全权处理就能全权处理的。
他把每个程序都当成窗口管理,不管怎样,当前只能有一个焦点窗口.
当发生鼠标,键盘事件时,系统会把消息的第一个参数,填入当前焦点程序的句柄,
然后写消息其他参数,然后把消息写入系统消息队列。这个"焦点程序"应该是操作系统管理的一个重要点。只有这样才能解释通系统集中管理消息而又能准确判断
是哪个程序发生了事件。之后的就是应用程序时刻检测系统队列,然后放入自己的应用程序消息队列,然后放入程序对应的各个子窗口队列
,然后各个窗口处理对应的消息,作出响应。不知道这样理解对吗?
如果不知道,delphi用久了,还以为真是自己设计的窗口直接接收处理了这些消息呢。如果忽略操作系统的调度,可以这么认为,但是知其然,更要知其所以然,这样当出现复杂的问题的时候,才能保持清醒的头脑,不被一些假想所迷惑。
以后慢慢体会吧,最近就是在看"深入核心VCL",弄的一头污水,现在可以继续下去了。:)