问题:我做的控件是用的MFC,带界面,浏览器使用,左边一个树控件,右边 4 个static 控件,鼠标左键单击树,我希望树节点可以响应,右键时,我希望可以弹出菜单。
     但左键消息都是由整个控件得到,如何让树控件得到?方便的知道是哪个节点背单击?    我查阅了VC_MFC_Activex 等相关资料,鼠标测试都是利用  判断单击时的 POINT 是不是落到需要响应的区域内。那么树控件不会一个 节点一个节点地测试吧?    请高手解答!

解决方案 »

  1.   

    有没有一种方法让 事件响应透明?跳过 ocx 控件这个 mask ,让里面用到的控件(treectrl)直接响应?
      

  2.   

    记住一点:窗口的消息肯定是窗口来处理的,窗口内部无论是什么(比如无窗口控件),它对消息的响应必须依赖于宿主窗口是否提供机会。对于有窗口控件,因为控件本身是窗口,所以它直接获得消息处理权,所以TREECTRL直接响应(包括反射的消息)。
    对于无窗口控件,消息将由容器窗口接收,但容器窗口会给控件处理消息的机会,但这些消息通常都是鼠标键盘消息。
      

  3.   

    试下,实现CMyTreeCtrl:public CTreeCtrl{....};在里面添加对应的反射消息,在消息响应函数里添加弹出菜单代码
    然后把CTreeCtrl类型的变量全改为CMyTreeCtrl