【发布时间】:2015-11-03 20:44:50
【问题描述】:
我正在尝试向我的 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 书中的 CMyToolTipCtrl 类添加到 OnCreate 函数中的:
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!";
工具提示也会显示在我的应用程序中。
【问题讨论】:
-
TTN_GETDISPINFO: "此通知代码以WM_NOTIFY 消息的形式发送。" 您是否在所有者窗口中安装了
WM_NOTIFY消息处理程序?请出示您的代码。 -
正如我所说,它适用于新创建的项目。但我会添加代码。
-
this可以是任何东西。CChildView是CMyToolTipCtrl的所有者窗口吗? -
此代码在
CChildView::OnCreate中执行。所以this指的是CChildView实例。这是我创建的工作示例应用程序的整个CChildView类的代码:pastebin.com/FLYaRAwu。 -
您是否尝试将
CMyToolTipCtrl替换为库存CToolTipCtrl,以验证自定义控件实现不会导致此问题。
标签: c++ visual-studio-2013 mfc tooltip