不用派生CTreeCtrl不用繁琐的过程 教你如何让CTreeCtrl的每一项有ToolTip提示
最近工作中需要让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);
}
不用派生CTreeCtrl不用繁琐的过程 教你如何让CTreeCtrl的每一项有ToolTip提示的更多相关文章
- 极速创建 IOS APP !涛舅舅苹果 IOS APP自助生成系统!不用证书、不用越狱、永久可用
不用签名将网页封装成苹果APP,无需苹果企业签名,IPA签名,ios签名,免越狱安装 (本方法只支持网站封装app,原生的用不了,详细请咨询客服) 近期很多朋友问我把网站变成app的方法,原因很多种, ...
- EF 序列化实体为Json时的循环引用问题(不用自己写实体,不用匿名类型,不用EF的上下文属性)
自己写实体可以完美解决这个问题.(支持时间格式自定义) 用匿名类型也可以. 设置上下文方法如下: (jz为数据库上下文对象) jz.Configuration.ProxyCreationEnabled ...
- 不用虚机不用Docker使用Azure应用服务部署ASP.NET Core程序
一般我们写好了应用程序想要部署发布它,要么发布到物理机,要么发布到虚拟机,要么发布到容器来运行它.现在有了Azure应用服务,我们可以完全不用管这些东西,只管写好自己的代码,然后使用VisualStu ...
- Jetty直接调试,不用部署,不用弄一些杂七杂八的设置
以前调试web程序的,搭建Tomcat实在是费劲,就想找一个比较简单的方式,我就想调试一下我写的某一个servlet形式,看到<how Tomcat works>这本书,才明白确实可以,不 ...
- 【从汉字中提取数字】不用公式,不用VBA,如此简单的方法你是否用过?
转自:http://huaban.com/pins/19664410 具体操作过程请看附图动画:
- YiluPHP是如何做到不用配置、不用注入就能直接使用所有的类?
使用过YiluPHP的人都会发现,不管是模型类还是逻辑类.辅助类还是工具类,使用所有类都不需要在配置文件中设置加载或注入,也不需要在页面中使用 include 或 require 或 use ,直接使 ...
- 教你一招:解决安装或卸载office时 提示错误2503 2502 发生了内部错误
问题重现: 解决办法:使用软件卸载工具 Uninstall Tool 3.5.1 中文破解版强制删除文件,非常暴力,完美解决. 解决过程一览: 工具下载地址: 软件卸载工具 Uninstall Too ...
- 教你一招:解决u盘插入计算机时提示格式化,如何恢复u盘中的文件
1.插入U盘时,计算机提示格式化 看到这里,到底是格不格呢?别怕,随便你了. 2.查看U盘属性,发现都为零 怎么办呢?u盘上面有很多重要文件啊!别急,继续往下看. 3.解决办法 (1)下载DiskGe ...
- 教你一招:解决Win 10安装软件时提示:文件系统错误 (-1073740940)
1.win+R输入 gpedit.msc 2.左边计算机配置 windows设置——安全设置——本地策略——安全选项 3.在安全选项右边选择 用户账户控制:管理员批准模式中管理员的提升权限提示的行为, ...
随机推荐
- Google的Guava工具类splitter和apache stringutil对比 编辑
一直用的是apache的stringutil工具类,其实google的工具类项目 guava中居然也有字符串的分隔类splitter的,在 http://code.google.com/p/guava ...
- bootstrapValidator Maximum call stack size exceeded
既然validator依赖与Bootstrap3,那么表单必须使用Bootstrap的类来编写. Tip1:如果表单不是通过Bootstrap构建(即元素包含表单项且关联的label没有form-gr ...
- ecstore实现图片分离(静态资源分离)配置文件
转载http://bbs.ec-os.net/read.php?tid=854 图片分离涉及到三个config设置#define('APP_STATICS_HOST', 'http://192.168 ...
- 很强的PHP图片处理类
/*** 基本图片处理,用于完成图片缩入,水印添加* 当水印图超过目标图片尺寸时,水印图能自动适应目标图片而缩小* 水印图可以设置跟背景的合并度** Copyright(c) 2005 by ustb ...
- HTML标签区别
一.div和span的区别 div是一个块级元素,可以包含段落,表格等内容,用于放置不同的内容.一般我们在网页通过div来布局定位网页中的每个区块. span是一个内联元素,没有实际意义,它的存在纯粹 ...
- php 字符编码转换函数 iconv mb_convert_encoding比较
在使用PHP处理字符串时,我们经常会碰到字符编码转换的问题,你碰到过iconv转换失败吗? 发现问题时,网上搜了搜,才发现iconv原来有bug ,碰到一些生僻字就会无法转换,当然了配置第二个参数时, ...
- dll signing issue
1. Verify if a dll has been signed sn.exe -v module.dll Scenario: sometimes for security reasons, a ...
- MongoDB资料--Java驱动, Hadoop驱动, Spark使用
MongoDB数据库备份: mongodump -h 192.168.1.160 -d MapLoc -o /usr/local/myjar/mongo/MapLoc/数据库还原:mongoresto ...
- C C++ OC iOS面试重点问题(一)
C C++ OC iOS面试重点问题(一) 1.字符串常量需要加\0 2.逻辑运算 位操作(经典:实现两个数的交换) 3.关键字 4.引用和指针的区别和联系 5.如何引用一个已经定义过的全局变量? ...
- chord原理的解读
chord: A Scalable Peer-to-peer Lookup Service for Internet Application 在 P2P 系统中,有效地定位分布在网络中不同节点的数据资 ...