1、要实现的功能:单击某一项,在一个编辑框里显示该项的全路径。
   存在的问题:每次显示的都是上次选中项的全路径。
   双击节点或单击节点前的加号都可以正确显示,不知道单击是怎么回事。2、要实现的功能:单击某一项,改变它的图标。
   

解决方案 »

  1.   

    不能使用单击事件的参数来判断点中哪一个节点。可以在单击事件中用HitTest来判断选中哪一个节点。
    单击一项,改变图标,你的难处在哪里?不是用ImageList嘛
      

  2.   

    在TreeView的TVN_SELCHANGED里面处理void CEditTreeCtrl::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult)
    {
    NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
    TVITEM item = pNMTreeView->itemNew; //here is your code to update the edit caption
    *pResult = 0;
    }2、用SetItemImage(htiSon, 0, 1);设置两幅不同地图片就行了
       
      

  3.   

    1.处理CTreeCtrl的nm_click事件,hittest,然后getitemtext即可得到正确的路径
    2.使用CTreeCtrl::SetItem
      

  4.   

    CPoint pt;
    GetCursorPos(&pt);
    ScreenToClient(&pt);HTREEITEM hItem = HitTest(pt);
      

  5.   

    1。
    void CTest6Dlg::OnClickTree1(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    // TODO: Add your control notification handler code here
    NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;         CPoint pt;
             GetCursorPos(&pt);
             ScreenToClient(&pt);         HTREEITEM hItem = m_tree.HitTest(pt);
             
              //显示路径 *pResult = 0;
    }
    2。TV_ITEM* pItem;
    pItem.hItem = hItem;
    pItem.iSelectedImage = ??;
    pItem.iImage = ??;.....
    m_tree.SetItem(pItem);
      

  6.   

    又来晚了-_-b 楼主响应的消息错了吧应该响应NM_CLICK消息  然后就是上面的hittest了
      

  7.   

    同意楼上的兄弟们的说法,你做的时候多参考一下MSDN
      

  8.   

    多谢各位的热心 我一直不太清楚nImage 和nSelectedImage有什么不同,我用的时候都给它俩设相同的值 这会有什么隐患 还望指点
      

  9.   

    iSelectedImage  在被选择状态显示的图标index
    iImage          在未被选择状态显示的图标index
      

  10.   

    void CMainDlg::OnClickTree(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    CPoint pt;
        GetCursorPos(&pt);
    ScreenToClient(&pt);

    HTREEITEM hItem = m_tree.HitTest(pt); CString str;
    str.Format("%s",m_tree.GetItemText(hItem));
    AfxMessageBox(str);

    *pResult = 0;
    }还是不行,连字符都没有了
      

  11.   

    1、void CTest6Dlg::OnClickTree1(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    // TODO: Add your control notification handler code here
    NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;         CPoint pt;
             GetCursorPos(&pt);
             ScreenToClient(&pt);         HTREEITEM hItem = m_tree.HitTest(pt);
             
              //得到该项的全路径 
              //显示路径 *pResult = 0;
    }
    结果显示的不是上次选中项的路径了,而是位于选中项的下面项的下面的那一项的路径
    譬如:(在树中的上下位置)a节点下面是b节点,再下面是c节点,选a则显示c的全路径
    会是怎么回事呢
      

  12.   

    iSelectedImage  在被选择状态显示的图标index
    iImage          在未被选择状态显示的图标index
    本来我还根据其不同状态自己去设置呢 真是绕了一个大圈子
    多谢小三!!也怪我问题问得不清!
    第一个问题出现的现象太怪异了 望各路高手指点。群策群力!!先行多谢了!!
      

  13.   

    第一个问题有了两种解决方法:
    1〉在小三的程序中再加一句 pt.y -= 40;不知道这样做会不会有什么隐患 更不知道为什么不减不行
    2〉用xdljf(hunter)的方法,不过函数体中的句子有点小错误,应该改为
    NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
    TV_ITEM Temp;
    Temp = pNMTreeView->itemNew;
    TVITEM item = expanditem.hItem;
      

  14.   

    小三给出的解决方法是将ScreenToClient(&pt); 改为m_tree.ScreenToClient(&pt);不用减40了!!
    这种方法还存在一个小问题:程序执行后第一次单击无效;将某个文件夹打开后单击其子文件夹,第一次单击操作无效,显示的还是原来的路径。xdljf(hunter)的方法存在的小问题是:
    将某个文件夹打开后单击其子文件夹,第一次单击的子文件夹无效,不论单击多少次,再单击其他子文件夹显示的路径就是正确的,回头单击“第一次文件夹”也是正确的。问题比较奇怪,哪为遇到过?SOS……
      

  15.   

    这两种解决方法是没问题的,问题是我加的限制语句造成的!!
    在TreeView的TVN_SELCHANGED里面处理效果更好一些 
    多谢各位的热心相助!!!僧多粥少,就看着给了 抱歉 !!
    xingbin666(xingbin666)  不好意思,我要结帖了