用了InsertItem( LPCTSTR lpszItem, int nImage, int nSelectedImage, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST);
如何控制成只有双击的时候nSelectedImage才起作用,其它的什么单击呀都显示nImage

解决方案 »

  1.   

    在初始化时将nSelectedImage和nImage相等,在双击时再修改nSelectedImage为要显示的图像索引。
      

  2.   

    有什么难?nSelectedImage 是当item被选中时的图像索引,只要控制item的状态就行了,双击时设置 选中状态,其他都取消 选中状态。一个例子:1.增加一个 BOOL m_bDoubleClicked 变量纪录是否 双击
      初始为 m_bDoubleClicked=FALSE2.为Tree 增加以下事件:NM_DBLCLK,TVN_SELCHANGING,TVN_SELCHANGED3.事件代码:
       NM_DBLCK: 
           m_bDoubleClicked=TRUE;
    CPoint pt;
    GetCursorPos(&pt);
    m_tree.ScreenToClient(&pt);
    UINT flag;
    HTREEITEM htree=m_tree.HitTest(pt,&flag);
    if(htree!=NULL){
    m_tree.Select(htree,TVGN_CARET);
    }
    *pResult = 0;
       
      TVN_SELCHANGING:
          NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
    if(m_bDoubleClicked){
    *pResult = 0;
    }else{
    *pResult = 1;
    }  TVN_SELCHANGED:
          NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
    m_bDoubleClicked=FALSE;
    *pResult = 0;就是如此简单.
      

  3.   

    TO:longx() 
    厉害,厉害,但是,不知你有没有看过联众的聊天室的那种CTree,双击此item后,此item前的图变化,再当击AnotherItem时,焦点停留在AnotherItem上,而你的做法又回到了原来的Item上了?
      

  4.   

    很遗憾我没有见过联众的聊天室,所以不知道你究竟想做成什么样子,不过最多用到 NM_CUSTOMDRAW 就可以了.
      

  5.   

    longx()
     我想做的就是在你完成的功能上有所改进.
     改进就是当单击某个Item时,焦点落在该Item上,而前一次双击的Item的状态不变.(而你的功能是当我单击某个Item时,焦点又回到了前一次双击的Item)