每次显示(即将展示)工具提示时,如何使工具提示文本自动更新?
我有一个 CDialog 派生的对话框,它以通常的方式使用 CToolTipCtrl 工具提示,它运行得很好:
我也知道如何使用 CToolTipCtrl :: UpdateTipText 和 CToolTipCtrl :: Update
更新代码的各个位置的toolTip文本但是,我想要和尚未完成的是: 我希望每次鼠标在显示相应工具提示之前在工具上方悬停时,工具提示的文本都会更新,即显示的文本取决于工具提示文本显示时的情况。 / p>
到目前为止我的工作代码(截断到相关行):
class CmyDialog : public CDialog
{
virtual BOOL OnInitDialog();
virtual BOOL PreTranslateMessage(MSG* pMsg);
virtual void RefreshToolTipText(); // Want to call this prior each display
CToolTipCtrl m_toolTip;
}
BOOL CmyDialog::OnInitDialog()
{
CDialog::OnInitDialog();
m_toolTip.Create(this);
m_toolTip.AddTool( GetDlgItem(IDC_SOMECONTROLID), "Sometext" );
m_toolTip.Activate( TRUE );
}
BOOL CmyDialog::PreTranslateMessage(MSG* pMsg)
{
if(IsWindow(m_toolTip.m_hWnd))
m_toolTip.RelayEvent(pMsg);
}
void CmyDialog::RefreshToolTipText()
{
m_toolTip.UpdateTipText( "updated runtime text", GetDlgItem(IDC_SOMECONTROLID) );
m_toolTip.Update();
}
答案 0 :(得分:3)
调用CToolTipCtrl::AddTool
时,请使用“特殊”值LPSTR_TEXTCALLBACK
作为工具提示的文本。这将导致工具提示将TTN_NEEDTEXT
通知发布到您要为其添加工具提示的窗口的父。然后父母可以相应地设置文本。
答案 1 :(得分:1)
我似乎已经弄明白了。由于我无法在线找到解决方案,我将在此处发布以供参考。如果有的话,我仍然会感激评论。
我在 CmyDialog 类的消息映射中添加了以下行:
BEGIN_MESSAGE_MAP(CmyDialog, CDialog)
ON_NOTIFY( TTN_SHOW, 0, OnToolTipTextAboutToShow )
END_MESSAGE_MAP()
我已将以下成员函数添加到CmyDialog:
void CmyDialog::OnToolTipTextAboutToShow(NMHDR * pNotifyStruct, LRESULT* result)
{
if ( pNotifyStruct->hwndFrom == m_toolTip.m_hWnd )
RefreshToolTipText();
}
显然,每次要显示工具提示时,TTN_SHOW通知代码都会通过WM_NOTIFY发送。我的函数中的if-check检查toolTip是否来自特定的CToolTipCtrl。