您的位置:首页 > 编程语言 > C语言/C++

关于c++ SysTreeView32 这玩意的....获得选中节点属性的方法

2016-11-09 01:36 381 查看
BOOL OnChildWindowsNotify(PVOID pParam)
{
LPNMHDR phdr = (LPNMHDR)pParam;
if (phdr->hwndFrom != hwndTreeView)
{
return FALSE;
}
switch (((LPNMHDR)pParam)->code)
{
case NM_RCLICK:
OnRclickTree((LPNMHDR)pParam);
break;
case NM_CLICK:
OnclickTree((LPNMHDR)pParam);
break;
case NM_DBLCLK:
OnDbclickTree((LPNMHDR)pParam);
break;

default:
break;
}
return TRUE;
}

BOOL OnDbclickTree(NMHDR* pNMHDR)
{
POINT point;
TVHITTESTINFO thti;
HTREEITEM htItem;
TVITEM tvitem;
TVITEM tvi;
unsigned int kks;
GetCursorPos(&point);
ScreenToClient(hwndTreeView, &point);
thti.pt = point;

thti.flags = TVHT_TORIGHT;
htItem = TreeView_HitTest(hwndTreeView, &thti);
if (htItem != NULL)
{

TVITEM tvi;
TCHAR szText[20];
memset(&tvi, 0, sizeof(tvi));
tvi.mask = TVIF_TEXT | TVIF_PARAM;
tvi.hItem = htItem;
tvi.pszText = szText;
tvi.cchTextMax = sizeof(szText);
BOOL bSuccess = TreeView_GetItem(hwndTreeView, &tvi);
ClientToScreen(hwndTreeView, &point);
ShowTextOnEdit(tvi.pszText);

return TRUE;
}
return FALSE;
}
LRESULT CALLBACK MainWndProc(
HWND hwnd, // 窗口句柄
UINT uMsg, // 消息标识符
WPARAM wParam, // 消息的第一个参数
LPARAM lParam)// 消息的第二个参数
{

switch (uMsg)
{

case WM_NOTIFY:
{OnChildWindowsNotify((PVOID)lParam);

}
break;
}
这几天找了好多东西,其实最开始找到的方法对了,只是tvi.mask = TVIF_TEXT | TVIF_PARAM;之后必须tvi.pszText = szText;tvi.cchTextMax = sizeof(szText);

我一直没设置tvi.cchTextMax = sizeof(szText);导致内存冲突....网上专门的资料太少了,买的树里面一笔带过....

我最开始用listbox,后来觉得treeview好看想用它,结果这玩意比listboxz复杂多了....又改回去用listbox了 ,再学习下,它确实比listbox好看点了,应该熟悉之后能简单点吧.等熟悉了,就用可以多用它了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  systreeview32