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

多行扩展工具提示控件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.42/5 (18投票s)

1999年12月8日

CPOL
viewsIcon

336122

downloadIcon

9575

可插入的多行可扩展工具提示控件

sample image 1  sample image 2 

COXToolTipCtrl 概述

Dundas此类是 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);
}
© . All rights reserved.