65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.22/5 (14投票s)

2002年1月25日

3分钟阅读

viewsIcon

203662

downloadIcon

5363

一个 CTreeCtrl 派生类,提供基于项目数据的工具提示。

Sample Image

引言

假设您正在使用一个支持项目数据的控件(例如,CTreeView),并且您希望添加工具提示支持,那么您可以找到一些好文章来确切地解释该怎么做(请参阅 code guru 中的 treeview 部分,Zafir Anjum 的文章将为您提供您需要的所有信息。但是,如果您想为每个项目显示自定义工具提示怎么办?一个不仅仅基于项目文本的工具提示?嗯,我一直在寻找一个类,它能给我自由地显示我想要的任何工具提示,但找不到任何一个。

以下方法将允许您显示项目工具提示,该工具提示将根据项目数据组成,因此例如,当您的鼠标悬停在列表控件中的名称上时,您可以显示带有电话号码的工具提示。

这些方法将通过使用 CTreeCtrl 派生类来展示,但也可以与支持设置/获取项目数据的其他控件一起使用。本文不会侧重于将工具提示支持添加到您的控件的技术方面。

我要感谢 Yaniv ben ari 提供的伟大想法。

这个类是什么?

CTreeCtrlCh 是一个 CTreeCtrl 派生类,它根据项目数据显示工具提示。您可以使用 SetItemData 函数将您喜欢的任何 string 附加到任何树项目,并且此文本将显示为工具提示。

此类如何工作?

此类使用一个 abstract 类作为 ItemData 模板。用户必须从 abstract 类派生自己的 ItemData 类,并且必须实现一个名为 GetToolTipStringvirtual 函数,该函数返回一个 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 将释放用于项目数据的所有已分配内存。

许可证

本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。

作者可能使用的许可证列表可以在此处找到。

© . All rights reserved.