多行扩展工具提示控件






4.42/5 (18投票s)
可插入的多行可扩展工具提示控件
COXToolTipCtrl 概述
此类是 Dundas Software 的 Ultimate Toolbox 的一个免费示例。版权所有 © Dundas Software Ltd. 1997-1999,保留所有权利
COXToolTipCtrl
是一个扩展的工具提示控件,允许使用多行工具提示以及扩展的工具提示文本。扩展的工具提示文本是额外的文本,如果用户单击工具提示窗口,则会显示该文本。如果工具提示包含扩展文本(以及标准工具提示字符串),则信息窗口将包含一个小箭头,提示用户单击该窗口。单击该窗口后,将显示扩展文本。如果再次单击该窗口,则该窗口将缩小到仅显示标准文本。
可以指定工具提示的最大宽度,如果信息文本太大而无法在此范围内显示,则该文本将换行到多行。该控件还允许您为工具提示指定不同的文本和背景颜色,并且还可以更改显示字体。
此类是 CToolTipCtrl
类的直接替代品。它包含了标准 CToolTipCtrl
的整个 API,并引入了标准工具提示中没有的新功能。
该控件的使用方式与任何其他工具提示控件相同。要使用该工具,只需调用 Create(...)
并指定该工具的父窗口,然后使用 AddTool(...)
成员函数将工具添加到该控件。例如。(在 formview 或对话框中)
tooltip.Create(this) tooltip.AddTool(GetDlgItem(IDC_CONTROL), _T("Tooltip text\rThis is the extended\ntooltip text"));
其中 ID_CONTROL
是控件的 ID。
要为工具提示指定扩展文本,只需在工具提示文本后附加一个 '\r',然后附加扩展工具提示信息。
与标准工具提示控件一样,您可以在创建时指定工具的实际文本(如上所示),也可以指定 LPSTR_TEXTCALLBACK
值,并提供一个 TTN_NEEDTEXT
处理程序以在运行时动态返回文本。
要处理 TTN_NEEDTEXT
消息,您需要在父窗口中添加一个消息处理程序,并在消息映射中添加一个条目,例如,在您的视图或窗体中
BEGIN_MESSAGE_MAP(CMyDlg, CDialog) ... ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipNotify) END_MESSAGE_MAP() BOOL CMyDlg::OnInitDialog() { CDialog::OnInitDialog(); tooltip.Create(this); tooltip.AddTool(GetDlgItem(IDC_CONTROL), LPSTR_TEXTCALLBACK); ... } BOOL CMyDlg::OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pResult) { TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR; UINT nID = pNMHDR->idFrom; if (nID == IDC_CONTROL) // Fill in the text buffer { _tcscpy(pTTT->szText, _T("Tooltip text\rExtended tooltip text")); return TRUE; } return FALSE; }
您还可以通过两种替代方式提供文本,一种是提供字符串资源
pTTT->lpszText = MAKEINTRESOURCE(nID);
pTTT->hinst = AfxGetResourceHandle();
return TRUE;
另一种是提供指向文本的指针
pTTT->lpszText = _T("Tooltip text\rExtended tooltip text"); return TRUE;
换行符 ('\n') 可以嵌入到文本或扩展文本中的任何位置,以生成多行工具提示。如果使用 SetMaxTipWidth()
指定了工具提示窗口的宽度,则工具提示文本将换行到此长度,并在必要时显示在多行上。
要更改工具提示的字体,只需使用 SetFont()
成员函数。
GetToolInfo/SetToolInfo
函数和 HitTest
函数与 CToolTipCtrl
版本非常相似,不同之处在于它们使用 OXTOOLINFO
结构而不是 TOOLINFO
结构。此结构定义为
struct OXTOOLINFO : public TOOLINFO { #if (_WIN32_IE < 0x0300) LPARAM lParam; //Application defined value that is associated with //the tool #endif int nWidth; //Width of box, or 0 for default COLORREF clrTextColor; //text color COLORREF clrBackColor; //background color }
因此与标准 TOOLINFO
非常相似,并且以相同的方式使用,只是 uFlags 成员尚未(尚未)使用。
要更改单个提示的颜色,请使用 GetToolInfo/SetToolInfo
函数
OXTOOLINFO ToolInfo; if (m_toolTip.GetToolInfo(ToolInfo, GetDlgItem(IDC_CONTROL))) { ToolInfo.clrBackColor = RGB(255, 255, 255); ToolInfo.clrTextColor = RGB( 0, 0, 255); m_toolTip.SetToolInfo(&ToolInfo); }