动态工具提示:使用LPSTR_TEXTCALLBACK时不发送TTN_GETDISPINFO

时间:2015-08-11 14:42:45

标签: c++ visual-studio-2013 mfc tooltip

我正在尝试向我的mfc应用程序添加动态工具提示。我能够使用带有静态文本的CToolTipCtrl显示工具提示。但是,当我将文字更改为LPSTR_TEXTCALLBACK时,我不会收到TTN_GETDISPINFO通知来设置文字,也不会再显示任何内容。

我从头开始创建了一个新的MFC项目。所以我的申请必须有所不同。但我无法找到,我做错了什么或我应该从哪里开始寻找。

这种行为有什么可能的原因?是否有可能将通知转移到其他地方?

我添加了这样的处理程序:

ON_NOTIFY(TTN_GETDISPINFO, NULL, OnToolTipNotify)

void CChildView::OnToolTipNotify(NMHDR* pNMHDR, LRESULT* pResult)
{
    TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
    wsprintf(pTTTW->szText,L"Hello World!");
}

使用Jeff Prosise MFC书中的OnCreate类在CMyToolTipCtrl函数中添加了工具提示:

CToolTipCtrl* tooltip = new CToolTipCtrl;
tooltip->Create(this, TTS_ALWAYSTIP);
TOOLINFO ti;
ti.cbSize = sizeof (TOOLINFO);
ti.uFlags = TTF_IDISHWND | TTF_SUBCLASS;
ti.hwnd = this->GetSafeHwnd ();
ti.uId = (UINT) tooltip->GetSafeHwnd ();
ti.hinst = AfxGetInstanceHandle ();
ti.lpszText = (LPTSTR) LPSTR_TEXTCALLBACK;

SendMessage (TTM_ADDTOOL, 0, (LPARAM) &ti);

如果我将第二行更改为

ti.lpszText = (LPTSTR) L"Hello World!";

工具提示也会显示在我的应用程序中。

1 个答案:

答案 0 :(得分:0)

这可能是您的项目设置的问题。

它是什么类型的项目? Unicode或MBCS。

如果是MBCS消息,您可能会错过通知,因为工具提示是一个unicode窗口并发送TTN_GETDISPINFOW! 因此,对我来说最好的做法是始终实施通知TTN_GETDISPINFOW和TTN_GETDISPINFOA。

您可以使用Spy ++

进行检查