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

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好看点了,应该熟悉之后能简单点吧.等熟悉了,就用可以多用它了。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值