• 不用派生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);
    }



  • 相关阅读:
    Chrome developer tool:本人钟爱的 console、Network 功能简谈
    Node.js:实现知乎(www.zhihu.com)模拟登陆,获取用户关注主题
    简谈 JavaScript、Java 中链式方法调用大致实现原理
    jQuery 源码解析二:jQuery.fn.extend=jQuery.extend 方法探究
    jQuery UI 多选下拉框插件:jquery-ui-multiselect
    为什么 JavaScript 中基本数据类型拥有 toString 之类方法?
    谈谈 JavaScript 中的 this 指向问题
    重写和重载的区别
    JAVA的静态方法,静态变量,静态类。
    重载
  • 原文地址:https://www.cnblogs.com/riskyer/p/3217824.html
Copyright © 2020-2023  润新知