关于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好看点了,应该熟悉之后能简单点吧.等熟悉了,就用可以多用它了。
{
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好看点了,应该熟悉之后能简单点吧.等熟悉了,就用可以多用它了。
相关文章推荐
- 关于c++ SysTreeView32 这玩意的....获得选中节点属性的方法
- 关于选中节点失去焦点时修改选中节点的方法
- 关于Unity中获得自己节点下的组件的简易方法
- 这是一个关于XML文档的操作管理器XMLHelper类,类中包括XML文档的创建,文档节点和属性的读取,添加,修改,删除的方法功能的实现
- 使用递归方法获得CheckBox选中的节点
- DOM通过不同方法获得属性节点的值
- js(javascript>中关于节点的方法和属性
- 使用递归方法获得TreeView中CheckBox选中的节点
- 获得javascript中对象的所有方法名和属性名的方法
- 在DOM 中 的节点(nodes) 属性和方法等
- 关于获得MFC窗口其它类指针的方法
- js访问xml之节点对象属性和方法【1】
- 默认选中TreeView某个节点的方法
- 默认选中Treeview的某个节点--修正方法
- Thin的DateChooser代码学习(关于js的函数参数为一个完整的函数以及“对象不支持此属性或方法”错误的解决)(原创,转载请声明)
- 采用递归的方法获得一棵树的所有叶节点
- 关于在vs2005下的gridview中去掉style属性中的border-collapse:collapse;的方法
- 关于submit() 对象不支持此属性或方法的解决方法
- 关于Javascript与表单结合时出现"对象不支持此属性或方法"的问题总结(不断更新中...)
- XML枚举一个节点的所有属性的方法