WIN窗体在绘制自己的时候是先画本身,然后画里面包含的子控件(这是我的理解不知道正不正确)。好,问题是:如果窗体里面有一个Panel容器控件,它包含了一个button控件,现在用鼠标点击button控件会触发按钮的事件,我想知道的是系统怎么知道我点击是button呢,为什么不是Pannel呢,能给我讲讲里面的实现原理吗?谢谢!

解决方案 »

  1.   

    z坐标,button在最前,同样的坐标,依次是button,panel,form,....desktop, 系统显然知道你点击的是包含当前坐标的object,同时肯定是这些object中z坐标在最前面的一个.
      

  2.   

    这也可以解释我们为什么可以拥有topMost窗口,就是把它的z坐标置较大值。
      

  3.   

    伟大的WndProc函数的第一个参数就是句柄,但是怎么获取到消息里的各项参数,我就不知道了,我想也没有必要查这么深远
    WndProc(HWND hWnd,UINT Message,WPARAM wPARAM,LPARAM) 
      

  4.   

    底层 WIN32消息机制里面
    点击按钮是通过 鼠标位置和鼠标的状态(按哪个键)实现的····如果鼠标位置在按钮内,同时单击键 那么就是点击该按钮
      

  5.   


     //MSG结构在头文件中定义如下: 
      
      typedef struct tagMSG 
      { 
      HWND hwnd; 
      UINT message; 
      WPARAM wParam; 
      LPARAM lParam; 
      DWORD time; 
      POINT pt; 
      } MSG, *PMSG; 从消息这个结构的定义我们可以知道, 每发生一个动作之后,系统立刻得到发生动作的句柄,发生什么动作,发生的时间,发生消息时鼠标的位置.然后系统立刻将这些信息封装在一条消息中,插入到应用程序的消息队列中.应用程序再一路分发到对应句柄的窗体中(按钮也是一个窗体)
      

  6.   

    是的,WIN是通过消息机制获得的,就象你说的 每发生一个动作之后,系统立刻得到发生动作的句柄 ,是发生动作后才得到句柄的,但是 系统是怎么知道要发生这个动作呢,就向我的问题样,Panel包含button,button的按钮范围也是Panel的范围,那鼠标点button的时候系统是怎么来判断的。
    我觉得wjq与lqflyc 说的有道理,不然系统也是不好判断的。