我用VS2008新建了一个MFC单文档的工程,给我自动生成了两个可停靠的面版,我想就直接在里面进行操作,有一个面版名字叫CClassView,他是一个由Cpane派生出来的类,这个类里面有个CTreeView的变量,由他创建了一个树型控件显示在这个窗口上面。
    我的问题是,我知道CClassView不是由CTreeView派生来的,正常来讲是得不到一些OnSelectChange之类的Tree控件专有的消息。但是我在Vs2008里面由工具添加的鼠标单击和双击消息一个都不响应,这是为什么呢?里面只响应自动生成的WM_CONTEXTMENU消息。我的要求就是需要响应双击消息,当然如果能响应到Tree控件里面的消息更好

解决方案 »

  1.   

    可以重载PreTranslateMessage函数来判断消息。
      

  2.   

    看看你的CTreeView变量在创建窗口的时候是不是沾满了整个的CClassView的区域。
    如果是这样的话,那你的CClassView的所有鼠标事件都会被CTreeView变量窗口劫持。你最好的方法就是把你的CTreeView创建的窗口变得小一点,让CClassView露出部分区域,然后在测试你的代码;
    究竟是CClassView不响应还是CTreeView不响应。如果是CTreeView,那你应该吧事件响应的代码放在CClassView,也就是它的父窗体中去实现。
      

  3.   

    这个你在创建你的CTreeView变量的实例时不是指定了一个控件ID嘛,这样你在CClassView针对这个ID添加TVN_SELCHANGED消息即可,如你的TreeCtrl控件的ID是ID_MY_TREE,则应该这样写,ON_NOTIFY(TVN_SELCHANGED, ID_MY_TREE, OnSelchangedMytree),再添加一个函数OnSelchangedMytree,这在这个消息处理函数里放你的响应代码即可,不过这个得你手工添加。
      

  4.   

    不好意思,周末没上班,来迟了
    我用xsc2001 提供的方法实现了对控件双击的响应,用***.GetSelectedItem()来找出哪项目被选中,可以使用
    只是可惜下面这个方面获取选中项目获取不到,没成功        NM_TREEVIEW*   pNMTreeView   =   (NM_TREEVIEW*)pNMHDR;   
    HTREEITEM   hSelected   =   pNMTreeView->itemNew.hItem;     //当前选项   
    HTREEITEM   hOldSelected   =   pNMTreeView->itemOld.hItem;   //原来选项