问题如下:
    我编了一个类似资源管理的程序,左边是树,右边是列表,由于我建立工程时是
以TreeView为基类,菜单项好多功能只有点击树时才变亮,其中有一项“功能转换”
要求点击列表时也能使用(该项的COMMAND函数在Tree类中),于是我采取了如下方法:
  将该项的UPDATE_COMMAND UI函数定义在列表类中,并加入语句:
   pCmdUI->Enable(true);
   这样一来,点击列表时菜单项变亮了,但选中时却并不执行相应的功能(我想是由于
COMMAND函数在树类中),怎么解决这个问题???求大家帮忙。

解决方案 »

  1.   

    首先对阿甘表示感谢!!
        可是我该功能函数处理了大量的树的操作,放到mainframe中处理树和列表都不方便了
    程序要做大量的改动,有没有其他更好的办法呢?
      

  2.   

    GetDlgItem(id)->EnableWindow(false)
      

  3.   

    这位大哥,我不知道将GetDlgItem(id)->EnableWindow(false)这条语句放到什么地方
    试了几个地方,运行时还是不行或出错
    能否说清楚点?
    谢谢啦!!
      

  4.   

    在列表视图里也添加一个COMMAND处理,然后简单的调用Tree视图中的处理函数或者向Tree视图发个消息。
    绕了点,不过能用。
      

  5.   

    你可以为你的每个菜单项都设置一个bool变量和树的节点句柄:
    在头文件中:
    bool bfirst;//定义完要先初始化成false
    bool bsecond;
    ..................
    HTREEITEM hRoot;
    HTREEITEM hAdmin;
    HTREEITEM hEscape;
    HTREEITEM hPopulation;
    HTREEITEM hCar;
    HTREEITEM hRecord;
    HTREEITEM hStatistic;
    然后在你向树控件插入项目的时候设置每一个节点的ItemData,例如:
    hEscape = m_ctlTree.InsertItem("追逃人员管理",0,1,hRoot,TVI_LAST);
    m_ctlTree.SetItemData(hEscape,0);
    hPopulation = m_ctlTree.InsertItem("常住人口管理",0,1,hRoot,TVI_LAST);
    m_ctlTree.SetItemData(hPopulation,1);
    hCar = m_ctlTree.InsertItem("盗抢机动车管理",0,1,hRoot,TVI_LAST);
    m_ctlTree.SetItemData(hCar,2);
    hRecord = m_ctlTree.InsertItem("录音文件管理",0,1,hRoot,TVI_LAST);
    m_ctlTree.SetItemData(hRecord,3);
    hStatistic = m_ctlTree.InsertItem("统计分析管理",0,1,hRoot,TVI_LAST);
    m_ctlTree.SetItemData(hStatistic,4);然后重载TreeCtrl的TVN_SELCHANGED消息,在消息函数中设置bool变量的值如下:
    HTREEITEM hSelect = GetTreeCtrl().GetSelectedItem();
    DWORD dwData = GetTreeCtrl().GetItemData(hSelect);
    switch(dwData){
    case 0:
                               ((CMainFrame*)AfxGetMainWnd())->bfirst = true;
    return;
    case 1: 
                               ((CMainFrame*)AfxGetMainWnd())->bsecond = true;
    break;
    case 2:
                               ((CMainFrame*)AfxGetMainWnd())->bthird = true;
    break;
                      ...........
                      ...........
    default:
    break;
    }
    *pResult = 0;然后重载每一个菜单的UPDATE_COMMAND_UI消息,在每个小处理函数中控制菜单是变灰还是变亮:如:
    void CMainFrame::OnUpdatefirst(CCmdUI* pCmdUI) 
    {
    pCmdUI->Enable(bfirst);

    }
    void CMainFrame::OnUpdatesecond(CCmdUI* pCmdUI) 
    {

    pCmdUI->Enable(bsecond);

    }
    ...........
    希望上面说的对你有所帮助!
      

  6.   

    我觉得还是最好放在DOC类或MainFrame中,你可以在Doc类中保存Tree类和List类对象的指针,在菜单处理函数中就可以直接调用了。如果不想保存Tree类和List类对象的指针也可以通过Doc类遍历所有View得到想要的指针。
      

  7.   

    如楼上所说的,这样的方法比较正规些,也就不存在view间互相调用的问题了
      

  8.   

    楼主的程序是多视图的,最好把数据用DOC管理,这样通讯比较方便。