给人的感觉是,我点击这个界面了,界面有了动作,肯定是应用程序先收到。
但是按事件驱动的原理:
觉得应该是系统先获取这些事件。
点击鼠标,输入字符--操作系统捕获,写入系统消息队列??--操作系统写入应用程序消息队列?
--应用程序检测、处理消息,作出响应(多窗口的话,再根据窗口句柄,对应的窗体进行响应)这样的理解对吗?操作系统怎么知道我点击的消息发给A程序而不会误发到B程序?

解决方案 »

  1.   

    是系统先得到消息
    操作系统怎么知道我点击的消息发给A程序而不会误发到B程序? 这个是根据句柄来的,既Handle
      

  2.   

    操作系统为什么不把应用程序A所占的区域交给A来全权接收处理呢?感觉这样更好理解点。
    思考:假如还有个程序B,如果A,B界面有重叠,如果操作系统不从中间协调,完全交给两个界面处理,他们岂不是会打架?而如果操作系统全权代理,率先先得到消息,他怎么知道我点击鼠标是在A还是在B程序?难道他要时刻记得当前谁在最前面吗?时刻判断这个区域归哪个程序管吗?
      

  3.   

    别胡思乱想,去网上搜搜"Windows消息机制"来看.
      

  4.   

    消息的第一个参数就是句柄,这个句柄是系统判断获取的吧?肯定不是程序A产生的,因为他是被动工作的。
    我就奇怪了,操作系统怎么会知道我点的程序A对应的句柄?他怎么不把程序B的句柄写入消息呢?
      

  5.   

    这些是系统帮你实现的,楼主可以上MSDN上去问答案。
      

  6.   

    感觉网上写的文章过于文学化,抽象化,不好理解。这个东西总感觉是蒙蒙龙龙的,似懂非懂的感觉,应该弄
    清楚点比较好,Delphi易学易入门,但是要提高,必须深入理解系统才行。
      

  7.   

    是系统先得到消息 
    操作系统怎么知道我点击的消息发给A程序而不会误发到B程序? 这个是根据句柄来的,既Handle不要想为什么是这样,是别人设计出来的,等学的多了懂得多了你自然明白为什么了。
    操作系统是很复杂的,不是说让谁全权处理就能全权处理的。
      

  8.   

    我明白了,操作系统应该是时刻知道当前是哪个程序在焦点状态。
    他把每个程序都当成窗口管理,不管怎样,当前只能有一个焦点窗口.
    当发生鼠标,键盘事件时,系统会把消息的第一个参数,填入当前焦点程序的句柄,
    然后写消息其他参数,然后把消息写入系统消息队列。这个"焦点程序"应该是操作系统管理的一个重要点。只有这样才能解释通系统集中管理消息而又能准确判断
    是哪个程序发生了事件。之后的就是应用程序时刻检测系统队列,然后放入自己的应用程序消息队列,然后放入程序对应的各个子窗口队列
    ,然后各个窗口处理对应的消息,作出响应。不知道这样理解对吗?
    如果不知道,delphi用久了,还以为真是自己设计的窗口直接接收处理了这些消息呢。如果忽略操作系统的调度,可以这么认为,但是知其然,更要知其所以然,这样当出现复杂的问题的时候,才能保持清醒的头脑,不被一些假想所迷惑。
      

  9.   

    不是焦点的问题.真想理解它的话,建议用一下VC,然后直接用SDK写一个Win32窗体,处理一些简单的事件(如按键,点击...),等你写出来的,你也就会大致了解Windows的消息机制了.想理解MS的东西,当然还是用VC来得直接点.还有MSDN,去看Messages and Message Queues.
      

  10.   

    不管怎样,起码我说服了自己,理解了自己的所谓的"工作原理",哈哈,高兴,揭帖。
    以后慢慢体会吧,最近就是在看"深入核心VCL",弄的一头污水,现在可以继续下去了。:)