不用派生CTreeCtrl不用繁琐的过程 教你如何让CTreeCtrl的每一项有ToolTip提示
2024-09-18 23:22:00
最近工作中需要让CTreeCtrl控件的每一项都有提示信息,于是谷歌百度,爬山涉水,结果是…………。在CodeProject里找到一篇文章是把CTreeCtrl派生出新类,重载一些函数自定义内容。使用的时候添加这个类,创建树控件。觉得十分麻烦,看懂都够费劲了。琢磨了一段时间,找出一个简单的实现方法,还没发现有什么漏洞,如果你们有什么问题,可以提出来,十分感谢。下面进入正题:
1、拖一个树控件到对话框中,绑定一个变量,风格随你喜好。
2、在头文件里添加一个CToolTipCtrl变量
3、在OnInitDialog()中给树添加一些项。
4、创建CToolTipCtrl对象,把树控件添加到对象中,具体代码眼睛请往下走。
5、重载PreTranslateMessage(MSG* pMsg),截获鼠标移动消息,根据光标位置,确定光标是否是在树的一个项上,从而得到这个项,添加对应要显示的提示信息。整个过程就是这样,下面附上代码。
OnInitDialog()里的代码
HTREEITEM root1,root2,midroot1,midroot2; root1=m_Tree.InsertItem(_T("树根1")); midroot1=m_Tree.InsertItem(_T("第1棵中树"),root1);
m_Tree.InsertItem(_T("第11棵小树"),midroot1);
m_Tree.InsertItem(_T("第12棵小树"),midroot1);
m_Tree.InsertItem(_T("第13棵小树"),midroot1);
m_Tree.Expand(midroot1,TVE_EXPAND); midroot2=m_Tree.InsertItem(_T("第2棵中树"),root1);
m_Tree.InsertItem(_T("第11棵小树"),midroot2);
m_Tree.InsertItem(_T("第12棵小树"),midroot2);
m_Tree.InsertItem(_T("第13棵小树"),midroot2);
m_Tree.Expand(midroot2,TVE_EXPAND); m_Tree.InsertItem(_T("第3棵中树"),root1);
m_Tree.Expand(root1,TVE_EXPAND); root2=m_Tree.InsertItem(_T("树根2")); m_Tree.InsertItem(_T("第1棵中树"),root2);
m_Tree.InsertItem(_T("第2棵中树"),root2);
m_Tree.InsertItem(_T("第3棵中树"),root2);
m_Tree.Expand(root2,TVE_EXPAND); m_ToolTip.CreateEx(this,TTS_ALWAYSTIP);
CRect rect,rect1;
m_Tree.GetClientRect(&rect); //获取树控件的客户区矩形
m_ToolTip.AddTool(GetDlgItem(IDC_TREE1),_T("我的树"),&rect,IDC_TREE1);
BOOL CTreeCtrlDemoDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_MOUSEMOVE){
CPoint pt=pMsg->pt;
m_Tree.ScreenToClient(&pt); //转换成控件客户区的坐标
UINT uFlags;
HTREEITEM item;
item=m_Tree.HitTest(pt,&uFlags); //测试这个点 具体用法参看MSDN
if(item!=NULL && (uFlags&TVHT_ONITEMLABEL)){
//更新提示信息 内容可自定
m_ToolTip.UpdateTipText(m_Tree.GetItemText(item),GetDlgItem(IDC_TREE1),IDC_TREE1);
m_ToolTip.RelayEvent(pMsg);
}
}
return CDialogEx::PreTranslateMessage(pMsg);
}
最新文章
- (转) 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)
- PHP curl获取页面内容,不直接输出到页面,CURLOPT_RETURNTRANSFER参数设置
- SecureCRT连接VirtualBox下的ubuntu以及NMP的搭建与通过宿主机访问该NGINX服务器过程
- Intellij IDEA 配置最简单的maven-struts2环境的web项目
- Android Service完全解析,关于服务你所需知道的一切(下)
- python调用模块&;函数
- PHP socket编程需要了解的一些基本知识
- Warp divergence
- Azkaban 2.5.0 job type 插件安装
- hive复杂类型与java类型的对应
- CentOS6.4安装Golang环境
- ToolStripButton样式
- 运行mvc报“无法确定存储版本;需要有效的存储连接或版本提示”
- UVa 121 - Pipe Fitters
- luogu3244 bzoj4011 HNOI2015 落忆枫音
- lua向文件中写入数据,进行记录
- 小强的HTML5移动开发之路(1)——HTML介绍
- Django 基础一(安装和启动)
- 【ASP.NET MVC系列】浅谈ASP.NET MVC 视图
- Linux进程被杀掉(OOM killer),查看系统日志
热门文章
- 解决JavaScript中如何输出空格
- Sql Server批量停止作业
- Jasper_crosstab_group _Error incrementing crosstab dataset
- iOS随机数-备
- Chaos Software Google Sync v10.1.1.0 和Syncovery Pro
- windows设备驱动安装指南
- NOI2015 小园丁与老司机
- 关于bootstrap--表格(table的各种样式)
- phpcms:六、频道页(category.html)
- WPF - 为什么不能往Library的工程中添加WPF window