我正在尝试向我的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!";
工具提示也会显示在我的应用程序中。
答案 0 :(得分:0)
这可能是您的项目设置的问题。
它是什么类型的项目? Unicode或MBCS。
如果是MBCS消息,您可能会错过通知,因为工具提示是一个unicode窗口并发送TTN_GETDISPINFOW! 因此,对我来说最好的做法是始终实施通知TTN_GETDISPINFOW和TTN_GETDISPINFOA。
您可以使用Spy ++
进行检查