CTreeCtrl\CListCtrl\CListBox 基于项目数据的 ToolTip






4.22/5 (14投票s)
2002年1月25日
3分钟阅读

203662

5363
一个 CTreeCtrl 派生类,
引言
假设您正在使用一个支持项目数据的控件(例如,CTreeView
),并且您希望添加工具提示支持,那么您可以找到一些好文章来确切地解释该怎么做(请参阅 code guru 中的 treeview
部分,Zafir Anjum 的文章将为您提供您需要的所有信息。但是,如果您想为每个项目显示自定义工具提示怎么办?一个不仅仅基于项目文本的工具提示?嗯,我一直在寻找一个类,它能给我自由地显示我想要的任何工具提示,但找不到任何一个。
以下方法将允许您显示项目工具提示,该工具提示将根据项目数据组成,因此例如,当您的鼠标悬停在列表控件中的名称上时,您可以显示带有电话号码的工具提示。
这些方法将通过使用 CTreeCtrl
派生类来展示,但也可以与支持设置/获取项目数据的其他控件一起使用。本文不会侧重于将工具提示支持添加到您的控件的技术方面。
我要感谢 Yaniv ben ari 提供的伟大想法。
这个类是什么?
CTreeCtrlCh
是一个 CTreeCtrl
派生类,它根据项目数据显示工具提示。您可以使用 SetItemData
函数将您喜欢的任何 string
附加到任何树项目,并且此文本将显示为工具提示。
此类如何工作?
此类使用一个 abstract
类作为 ItemData
模板。用户必须从 abstract
类派生自己的 ItemData
类,并且必须实现一个名为 GetToolTipString
的 virtual
函数,该函数返回一个 CString
对象,该对象将显示为工具提示。用户应该根据他自己的 ItemData
类构造这个返回的 CString
对象。听起来有点复杂?没那么复杂...请跟随我到下一节。
如何使用此类?
- 将您下载的文件添加到您的项目目录中,并将它们添加到您的项目中。
- 向您的对话框添加一个
TreeCtrl
,并使用控件向导为他分配一个成员。 - 将以下语句添加到您的对话框头文件中:
#include "TreeCtrlCh.h"
。 - 将树控件变量类型更改为
CTreeCtrlch
。 - 在对话框头文件中,构造一个从
ItemDataABSTRACT
派生的新类作为public
。此类将用作您的树项目数据,添加您想要的任何数据成员。还要向该类添加函数CString GetToolTipString
。class TTipItemData:public ItemDataABSTRACT { public: TTipItemData(); CString strTool; POSITION pos; CString GetToolTipString(); };
- 在您的对话框实现文件中,您需要实现
GetToolTipString()
函数。此函数必须返回一个CString
对象,该对象将显示为项目工具提示。在此函数中,您可以操作项目数据成员并构造您想要的任何string
,例如关于项目的附加信息、日期、大小等。TTipItemData::TTipItemData() { strTool = ""; pos = NULL; }; CString TTipItemData::GetToolTipString() //here, you compose the tool tip according to item data { CString tmp; return strTool; };
- 当您添加项目数据时,声明一个指向您从
ItemDataABSTRACT
派生的类的指针,为它的成员分配数据,并使用SetItemData
添加ItemData
指针。TTipItemData* p ; p = new TTipItemData; p->strTool = "is ran"; level1= m_Tree.InsertItem(""); m_Tree.SetItemText(level1,"First Name"); m_Tree.SetItemData(level1,DWORD(p));
- 不需要删除已分配的内存,
CTreeCtrlch
将释放用于项目数据的所有已分配内存。
许可证
本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。
作者可能使用的许可证列表可以在此处找到。