每次显示前如何更新工具提示文本?

Bmy*_*est 5 mfc dialog runtime tooltip

每次(即将)显示工具提示时,如何使工具提示文本自行更新?

我有一个CDialog派生的对话框,它CToolTipCtrl以通常的方式使用工具提示,它工作得很好:

  • CToolTipCtrlCDialog班级的成员变量。
  • 创建工具提示并添加到工具中 CDialog::OnInitDialog
  • 消息中继到CToolTipCtrlCDialog::PreTranslateMessage

我也知道如何使用CToolTipCtrl::UpdateTipText和更新代码不同位置的工具提示文本CToolTipCtrl::Update

但是,我想要但尚未完成的是: 我希望在显示相应的工具提示之前每次鼠标悬停在工具上时更新工具提示的文本,即显示的文本取决于工具提示时的情况- 显示文本。

到目前为止我的工作代码(截断到相关行):

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();   
}
Run Code Online (Sandbox Code Playgroud)

Nik*_*lis 3

调用时CToolTipCtrl::AddTool使用“特殊”值LPSTR_TEXTCALLBACK作为工具提示的文本。这将导致工具提示TTN_NEEDTEXT向您要为其添加工具提示的窗口的父窗口发布通知。然后家长可以相应地设置文本。