MFC TreeCtrl 控件(一):简单使用
来源:互联网 发布:ubuntu安装有道词典 编辑:程序博客网 时间:2024/05/22 13:19
本文描述了 MFC 中的树形控件 TreeCtrl 的简单使用,内容包括数据项的添加、图标设置、提示信息设置等。
新建基于对话框的应用程序,添加一个 TreeCtrl ,为其定义一个控件变量 m_userTreeCtrl,并将其属性:Has Buttons、Has Lines、Lines At Root和 Info Tip 都设为True。插入3个Icon资源,分别作为 管理员、部门、用户的图标。定义类变量 CImageList m_imageList 保存图标列表,定义类变量 CString m_csUserTips 设置用户提示信息,管理员和部门的提示信息通过其他方式提示。
在对话框初始化函数中添加代码:
HICON hIcon[3];hIcon[0] = theApp.LoadIcon(IDI_MANAGER);hIcon[1] = theApp.LoadIcon(IDI_MANAGEMENT);hIcon[2] = theApp.LoadIcon(IDI_USER);m_imageList.Create(16, 16, ILC_COLOR32, 3, 3);for(int i=0; i<3; i++)m_imageList.Add(hIcon[i]);m_userTreeCtrl.SetImageList(&m_imageList, TVSIL_NORMAL);m_csUserTips = _T("用户");InitUserTree(); // 插入数据项
其中,InitUserTree 函数代码如下:
void COnsitevideoDlg::InitUserTree(){HTREEITEM hRoot; // 根节点,管理员HTREEITEM hCity; // 部分节点HTREEITEM hUser; // 用户节点hRoot = m_userTreeCtrl.InsertItem(_T("DNP"), 0, 0);//hCity = m_userTreeCtrl.InsertItem(_T("测试部门1"), 1, 1, hRoot, TVI_LAST);m_userTreeCtrl.SetItemData(hCity, 1); // 传入简单数值hUser = m_userTreeCtrl.InsertItem(_T("测试用户11"), 2, 2, hCity, TVI_LAST);m_userTreeCtrl.SetItemData(hUser, (DWORD_PTR)m_csUserTips.GetBuffer()); // 传入指针hUser = m_userTreeCtrl.InsertItem(_T("测试用户12"), 2, 2, hCity, TVI_LAST);m_userTreeCtrl.SetItemData(hUser, (DWORD_PTR)m_csUserTips.GetBuffer());hUser = m_userTreeCtrl.InsertItem(_T("测试用户13"), 2, 2, hCity, TVI_LAST);m_userTreeCtrl.SetItemData(hUser, (DWORD_PTR)m_csUserTips.GetBuffer());//hCity = m_userTreeCtrl.InsertItem(_T("测试部门2"), 1, 1, hRoot, TVI_LAST);m_userTreeCtrl.SetItemData(hCity, 1);hUser = m_userTreeCtrl.InsertItem(_T("测试用户21"), 2, 2, hCity, TVI_LAST);m_userTreeCtrl.SetItemData(hUser, (DWORD_PTR)m_csUserTips.GetBuffer());hUser = m_userTreeCtrl.InsertItem(_T("测试用户22"), 2, 2, hCity, TVI_LAST);m_userTreeCtrl.SetItemData(hUser, (DWORD_PTR)m_csUserTips.GetBuffer());hUser = m_userTreeCtrl.InsertItem(_T("测试用户23"), 2, 2, hCity, TVI_LAST);m_userTreeCtrl.SetItemData(hUser, (DWORD_PTR)m_csUserTips.GetBuffer());//hCity = m_userTreeCtrl.InsertItem(_T("测试部门3"), 1, 1, hRoot, TVI_LAST);m_userTreeCtrl.SetItemData(hCity, 1);hUser = m_userTreeCtrl.InsertItem(_T("测试用户31"), 2, 2, hCity, TVI_LAST);m_userTreeCtrl.SetItemData(hUser, (DWORD_PTR)m_csUserTips.GetBuffer());hUser = m_userTreeCtrl.InsertItem(_T("测试用户32"), 2, 2, hCity, TVI_LAST);m_userTreeCtrl.SetItemData(hUser, (DWORD_PTR)m_csUserTips.GetBuffer());}
为了显示控件节点提示信息,需要相应 TreeCtrl 控件的 TVN_GETINFOTIP 消息,其响应代码如下:
void COnsitevideoDlg::OnTvnGetInfoTipUsertree(NMHDR *pNMHDR, LRESULT *pResult){LPNMTVGETINFOTIP pGetInfoTip = reinterpret_cast<LPNMTVGETINFOTIP>(pNMHDR);// TODO: 在此添加控件通知处理程序代码*pResult = 0;// 设置提示信息NMTVGETINFOTIP* pTVTipInfo = (NMTVGETINFOTIP*)pNMHDR;HTREEITEM hRoot = m_userTreeCtrl.GetRootItem();CString csText;// 设置提示信息的2种方法:通过Item类型判断、根据SetItemdata设置的参数if(pTVTipInfo->hItem == hRoot)csText = _T("管理员 ");else if(pTVTipInfo->lParam==1)csText = _T("部门");else{BSTR bstrTemp = (BSTR)(pTVTipInfo->lParam);csText = bstrTemp;}// 使用安全版本的拷贝函数,csText获取的长度需要加1,包含结束符_tcscpy_s(pTVTipInfo->pszText, csText.GetLength()+1, csText.GetBuffer());}
在上面的函数中,通过两种方式设置了控件节点的提示信息,第一种是直接判断接口的类型,然后设置器提示信息,如根节点;第二种是根据用 SetItemData 函数为节点设置的额外数据来设置的。SetItemData 可传入简单数值或一个指针,部门节点传入的就是简单的数值类型,通过判断该类型的值,然后设置其提示信息,其他的节点也可以通过这种方法来设置; 用户节点传入的则是一个字符串指针,此时,就可以直接获取该字符串的值,并将其设置为用户节点的提示信息。特别太需要注意的是该字符串不能是一个 InitUserTree 函数中的局部变量,否则指针引用将出错。
效果截图如下:
0 0
- MFC TreeCtrl 控件(一):简单使用
- MFC使用TreeCtrl控件
- MFC使用TreeCtrl控件
- VC/MFC之TreeCtrl控件使用经验总结
- VC/MFC之TreeCtrl控件使用经验总结
- VC/MFC之TreeCtrl控件使用经验总结
- MFC/控件使用个之TREEctrl
- MFC控件之TreeCtrl
- MFC - 树TreeCtrl使用
- VC/MFC之TreeCtrl控件使用经验总结(转帖)
- MFC控件篇之TreeCtrl
- MFC TreeCtrl控件的用法小结
- MFC treectrl控件类以及添加图标
- vc树形控件TreeCtrl经验总结(一
- 控件--TreeCtrl
- MFC 控件使用一
- MFC TreeCtrl 控件(二):显示特性设置 颜色、图标、完全展开
- 树形控件TreeCtrl的基本使用
- 设计模式的再研究(策略模式和观察者模式的结合)
- 主编 PHP 计算页面执行时间
- C++ primer (5th) 随想与学习笔记 5 不为指针操心 新标准更开放
- 解决Dynamic Web Module 3.0 requires Java 1.6 or newer.问题
- 第五章表达式
- MFC TreeCtrl 控件(一):简单使用
- leetcode: Minimum Path Sum
- 近期学习计划
- Raphael.js API之Element.mousedown(),Element.mousemove(),Element.mouseup(),Element.mouseout(),Element.
- perl函数说明(die)
- 【转】Spring事务配置和隔离级别
- block(块),page(页),buffer cache(块缓冲)区别与联系
- 网页分享技术—对网页分享技术的思考
- Qt探秘——谈ui文件的用法