activex 控件对鼠标按键的响应,传到子控件 (CTreeCtrl) 问题
问题:我做的控件是用的MFC,带界面,浏览器使用,左边一个树控件,右边 4 个static 控件,鼠标左键单击树,我希望树节点可以响应,右键时,我希望可以弹出菜单。
但左键消息都是由整个控件得到,如何让树控件得到?方便的知道是哪个节点背单击?
我查阅了VC_MFC_Activex 等相关资料,鼠标测试都是利用 判断单击时的 POINT 是不是落到需要响应的区域内。那么树控件不会一个 节点一个节点地测试吧?
请高手解答!
[解决办法]
树控件也可以从鼠标位置找到对应的项。
如果你把所有控件都放在一个对话框内,那么对消息的处理跟普通窗口程序是一样的
[解决办法]
记住一点:窗口的消息肯定是窗口来处理的,窗口内部无论是什么(比如无窗口控件),它对消息的响应必须依赖于宿主窗口是否提供机会。
对于有窗口控件,因为控件本身是窗口,所以它直接获得消息处理权,所以TREECTRL直接响应(包括反射的消息)。
对于无窗口控件,消息将由容器窗口接收,但容器窗口会给控件处理消息的机会,但这些消息通常都是鼠标键盘消息。
[解决办法]
试下,实现CMyTreeCtrl:public CTreeCtrl{....};在里面添加对应的反射消息,在消息响应函数里添加弹出菜单代码
然后把CTreeCtrl类型的变量全改为CMyTreeCtrl