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

Mfc 如何在每次显示前更新工具提示文本?,mfc,dialog,runtime,tooltip,Mfc,Dialog,Runtime,Tooltip,如何使工具提示文本在每次(即将)显示时自动更新? 我有一个CDialogderived对话框,它以通常的方式使用ctoolticptrl工具提示,效果很好: myCDialog类中的成员变量 在CDialog::OnInitDialog 在CDialog::PreTranslateMessage 我还知道如何使用ctoolticptrl::UpdateTipText和ctoolticptrl::update 然而,我想要但尚未实现的是: 我希望在显示相应的工具提示之前,每次鼠标悬停在工具上时

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

我有一个
CDialog
derived对话框,它以通常的方式使用
ctoolticptrl
工具提示,效果很好:

  • my
    CDialog
    类中的成员变量
  • CDialog::OnInitDialog
  • CDialog::PreTranslateMessage
我还知道如何使用
ctoolticptrl::UpdateTipText
ctoolticptrl::update

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

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


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

我似乎已经自己找到了答案。由于我在网上找不到解决方案,我将把它贴在这里作为参考。如果有任何意见,我将不胜感激

我在CmyDialog类的消息映射中添加了以下行:

我在CmyDialog中添加了以下成员函数:

void CmyDialog::OnToolTipTextAboutToShow(NMHDR * pNotifyStruct, LRESULT* result)
{
   if ( pNotifyStruct->hwndFrom == m_toolTip.m_hWnd )
       RefreshToolTipText();
}

显然,每次显示工具提示时,TTN_SHOW通知代码都会通过WM_NOTIFY发送。我的函数中的if check检查工具提示是否来自特定的CTOLTIPCTRL。

我想我已经找到了解决方案,但作为一个新用户,我无法在接下来的6小时内发布答案:c)。我明天会的…谢谢你的回答。正如上面所评论的,我已经找到了一个似乎已经有效的解决方案。不需要设置LPSTR_TEXTCALLBACK,可能是默认设置?如果你对我上面的解决方案有一些意见,我很乐意听听。还在学习。。。(附言:不能用少于15个代表:c的票数来更新你的答案,但是谢谢!)您的解决方案会起作用,但根据文档,一般来说,“正确”的处理方法是使用回调并响应
TTN\u NEEDTEXT
。但如果你的解决方案符合你的目的,那就太好了!不必担心投票结果——不必为投票而担心;)注释:在RefreshToolTipText()中使用m_toolTIP.Update()不是一个好主意,因为工具提示窗口需要更改大小(即多行工具提示,在2到3行之间更改)。我必须在代码中绕过这一点,否则当代码进入无限循环时可能会出现崩溃。
BEGIN_MESSAGE_MAP(CmyDialog, CDialog)
   ON_NOTIFY( TTN_SHOW, 0, OnToolTipTextAboutToShow )   
END_MESSAGE_MAP()
void CmyDialog::OnToolTipTextAboutToShow(NMHDR * pNotifyStruct, LRESULT* result)
{
   if ( pNotifyStruct->hwndFrom == m_toolTip.m_hWnd )
       RefreshToolTipText();
}