win32下怎么获得tree view当前点击的节信息呀

ayiyi0910 2011-08-01 02:44:42
如题, 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;
}
}
}
...全文
304 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ayiyi0910 2011-08-01
  • 打赏
  • 举报
回复
谢谢了, 这个问题弄好了
allenhiman 2011-08-01
  • 打赏
  • 举报
回复
你看看吧 实际上MFC也是用那些宏发的消息 每个MFC的CTreeCtrl的类方法都有对应的宏定义 你只要能用MFC实现 win32翻译成那些"TreeView_" 开头的宏就可以了 或者发消息 我建议用宏
ayiyi0910 2011-08-01
  • 打赏
  • 举报
回复
楼主能不能说的详细一点,谢谢了

TreeView_GetSelection应该是取得句柄, 然后我是不是用下面这样的方法呀

TV_ITEMW tvItem;
memset(&tvItem, 0, sizeof(tvItem));

tvi.hItem= Selected;//指向当前被选节点的句柄

if(SendDlgItemMessage(hWnd,IDC_TREE1,TVM_GETITEM,TVGN_CARET,(LPARAM)&tvi))
Eleven 2011-08-01
  • 打赏
  • 举报
回复
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;
allenhiman 2011-08-01
  • 打赏
  • 举报
回复
HTREEITEM itemSel = TreeView_GetSelection( hWndTree);
allenhiman 2011-08-01
  • 打赏
  • 举报
回复
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.

Syntax

HTREEITEM TreeView_GetSelection(
HWND hwndTV
);

Parameters

hwndTV
Handle to the tree-view control.
Return Value

Returns the handle to the item if successful, or NULL otherwise.

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧