如题, win32下怎么获得tree view当前点击的节信息呀, 注意我要的不是mfc中的方法我在网上找到了下面的方法, 但是在单击节点时,获得的节点信息是单击某节点之前被选中节点的信息。求教一下怎么取得当前的节点
    响应WM_NOTIFY消息,并判断;
           单击鼠标左键,获得被选择的项:
           if(((LPNMHDR)lParam)->code == NM_CLICK)
           {
             char Text[255]="";
             memset(&tvi,0,sizeof(tvi));
             Selected=(HTREEITEM)SendDlgItemMessage(hWnd,IDC_TREE1,TVM_GETNEXTITEM,TVGN_CARET,(LPARAM)Selected);//请求被选节点的句柄
    
             if(Selected==NULL)
             {
               MessageBox(hWnd,"No Items in TreeView","Error",MB_OK|MB_ICONINFORMATION);
               break;
             }             tvi.mask=         TVIF_TEXT;
             tvi.pszText=     Text;
             tvi.cchTextMax=256;
             tvi.hItem=        Selected;//指向当前被选节点的句柄
 
             if(SendDlgItemMessage(hWnd,IDC_TREE1,TVM_GETITEM,TVGN_CARET,(LPARAM)&tvi))     //取得所选的节点
             {
                if(tvi.cChildren==0 && strcmp(tvi.pszText,"Click Me!")==0)
                {//如果被选节点的文字信息是“Click me!”,那么我们删除掉这个节点
                   MessageBox(hWnd,"Press OK to delete me!","Example",MB_OK|MB_ICONINFORMATION);
                   //删除所选择的节点
                   SendDlgItemMessage(hWnd,IDC_TREE1,TVM_DELETEITEM,TVGN_CARET,(LPARAM)tvi.hItem);
                   break;
                }
              }
           }

解决方案 »

  1.   

    TreeView_GetSelection Macro--------------------------------------------------------------------------------Retrieves the currently selected item in a tree-view control. You can use this macro, or you can explicitly send the TVM_GETNEXTITEM message with the TVGN_CARET flag. SyntaxHTREEITEM TreeView_GetSelection(
        HWND hwndTV
    );ParametershwndTV
    Handle to the tree-view control. 
    Return ValueReturns the handle to the item if successful, or NULL otherwise. 
      

  2.   

    HTREEITEM itemSel = TreeView_GetSelection( hWndTree);
      

  3.   

    case WM_NOTIFY:
    {
    LPNMHDR lpnmh = (LPNMHDR)lParam;
    if(NM_CLICK == lpnmh->code)
    {
    DWORD dwPos = GetMessagePos();
    POINT pt;
    pt.x = LOWORD(dwPos);
    pt.y = HIWORD(dwPos);
    ScreenToClient(lpnmh->hwndFrom, &pt);
    TVHITTESTINFO ht = {0};
    ht.pt = pt;
    ht.flags = TVHT_ONITEM;
    HTREEITEM hItem = TreeView_HitTest(lpnmh->hwndFrom, &ht);
    TVITEM ti = {0};
    ti.mask = TVIF_HANDLE | TVIF_TEXT;
    TCHAR buf[MAX_COUNT] = {0};
    ti.cchTextMax = MAX_COUNT;
    ti.pszText = buf;
    ti.hItem = hItem;
    TreeView_GetItem(lpnmh->hwndFrom, &ti);
    MessageBox(hWnd, buf, NULL, 0);
    }
    }
    break;
      

  4.   

    http://blog.csdn.net/visualeleven/article/details/6650973
      

  5.   

    楼主能不能说的详细一点,谢谢了TreeView_GetSelection应该是取得句柄, 然后我是不是用下面这样的方法呀 TV_ITEMW tvItem;
    memset(&tvItem, 0, sizeof(tvItem));  tvi.hItem= Selected;//指向当前被选节点的句柄
      
      if(SendDlgItemMessage(hWnd,IDC_TREE1,TVM_GETITEM,TVGN_CARET,(LPARAM)&tvi)) 
      

  6.   

    你看看吧 实际上MFC也是用那些宏发的消息 每个MFC的CTreeCtrl的类方法都有对应的宏定义 你只要能用MFC实现 win32翻译成那些"TreeView_" 开头的宏就可以了 或者发消息 我建议用宏