如题, 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;
}
}
}
响应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;
}
}
}
HWND hwndTV
);ParametershwndTV
Handle to the tree-view control.
Return ValueReturns the handle to the item if successful, or NULL otherwise.
{
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;
memset(&tvItem, 0, sizeof(tvItem)); tvi.hItem= Selected;//指向当前被选节点的句柄
if(SendDlgItemMessage(hWnd,IDC_TREE1,TVM_GETITEM,TVGN_CARET,(LPARAM)&tvi))