MFC TreeCtrl 控件(一):简单使用
本文描写叙述了 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
函数中的局部变量,否则指针引用将出错。
效果截图例如以下:
MFC TreeCtrl 控件(一):简单使用的更多相关文章
- VS2013+MFC串口控件的简单上位机
因为做东西,正好用到这里.所以就上传了文件分享一下. 利用VS带的MFC库,用起来还是比较方便的.空间的程序构架都是自动生成的,具体的程序自己加进去就行. 里面有整个的工程 还带有一个生成的EXE文件 ...
- 如何将 MFC ActiveX 控件标记为安全,脚本和初始化
MSDN原文.ActiveX控件标记安全(可以不仅仅是MFC ActiveX) 概要 默认情况下,MFC ActiveX 控件未标记为对脚本编写是安全的和对初始化是安全的.控制运行在 Internet ...
- 开发ActiveX控件调用另一个ActiveX系列1——开发一个MFC ActiveX控件
ActiveX开发的教程有很多,我也从中受益匪浅,例如以下这几篇: 基本教程:http://www.cnblogs.com/guenli/articles/1629915.html 注意事项:http ...
- 发布MFC ActiveX控件并实现自动更新
一. 引言 上一篇我们讲了如何使用 VC 2005来开发 MFC ActiveX控件,我们开发 ActiveX控件最终目的是将 ActiveX控件发布出来并嵌入在 Web网页中,随着控件 ...
- WebBrowser控件的简单应用2
原文:WebBrowser控件的简单应用2 第一个简单应用里面讲述的是如何模拟调用当前网页的元素的事件或者赋值/取值.这次的应用讲述的是1:如何处理弹出新页面的事件(总是在我的浏览器里面现实新页面)2 ...
- vs2005中的WebBrowser控件的简单应用
原文:vs2005中的WebBrowser控件的简单应用 这个控件被封装了一下,和以前的调用方式稍有不同.事件还是那几个,变化不大.方法变了不少.从网上能查到的资料不多,贴出一些代码来作参考.看看这段 ...
- MFC TabCtrl 控件修改标签尺寸
注意:无论那种方法,都要先设置Tab控件的Style属性为fixed width. 第一种方法 MFC,tabcontrol控件改变标签大小 - CSDN博客 https://blog.csdn.ne ...
- vs2010开发activex(MFC)控件/ie插件(一)
原文:http://blog.csdn.net/yhhyhhyhhyhh/article/details/50782904 vs2010开发activex(MFC)控件: 第一步:生成ac ...
- MFC 改变控件的大小和位置
mfc 改变控件大小和位置用到的函数: ) void MoveWindow(int x, int y, int nWidth, int nHeight); ) void MoveWindow(LPCR ...
随机推荐
- VirtualBox虚拟vdi磁盘扩容
http://blog.chinaunix.net/uid-25627207-id-3342576.html
- javaweb学习总结(三十四)——使用JDBC处理MySQL大数据
一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob,clob用于存储大文本,blob用于存储二进制数据,例如图像.声音.二进制文等. 在实际开发中,有时 ...
- 解决win8.1右键菜单出现在左边
这个问题估计很少有人遇到,当在桌面上单击鼠标右键时,如果正常情况下,应该是在鼠标光标的右侧弹出来,除非右边的空间不够了,才在左侧弹出.但遇到故障,就是不论在桌面的哪里点右键,菜单都在左侧弹出,虽然不影 ...
- 匿名函数和Lambda表达式
这个题目有点牵强,真不知道如何取一个比较中意的名称,写技术博客,我很少拘泥小节,但是注重细节,如果细节都出现问题了,那么这个博文也就失去了价值. 其实应该从委托说起,委托是C#中的一个重要的内容,记得 ...
- linux多线程驱动中调用udelay()对整个系统造成的影响(by liukun321咕唧咕唧)
以前没考虑过这个问题,而且之前可能运气比较好,虽然用了udelay但也没出什么奇怪的问题,今天在 CSDN上看到了一篇关于此问题帖子,觉得很受用,再此做简要的记录和分析: 驱动开的是内核线程 跟普通进 ...
- C#中的@符号
C# 中的 @ 符号 C# 中的 @ 符号其实有很多的用法,我们来看看 @ 有什么神奇之处. 1. 限定字符串 用 @ 符号加在字符串前面表示其中的转义字符 “ 不 ” 被处理. 如果我们写一个文 ...
- hadoop2.2编程:自定义hadoop map/reduce输入文件切割InputFormat
hadoop会对原始输入文件进行文件切割,然后把每个split传入mapper程序中进行处理,FileInputFormat是所有以文件作为数据源的InputFormat实现的基类,FileInput ...
- 深入浅MFC
视图类CView 在MFC"文档/视图"架构中,CView类是所有视图类的基类,它提供了用户自定义视图类的公共接口.在"文档/视图"架构中,文档负责管理和维护数 ...
- [转] ICPC2013 World Finals赛后感
原文地址:http://blog.sina.com.cn/s/blog_6c7729450101lmll.html Orz... 26号考完最后一科计网,27号准备了一下各种材料,28号凌晨就踏上旅程 ...
- xfce terminal tab被解释为super+tab的bug
https://bugzilla.xfce.org/show_bug.cgi?id=10760 解决方法 Every few weeks the tab key stops working in th ...