【发布时间】:2017-08-08 22:18:38
【问题描述】:
在标准 C++/MFC MDI 文档/视图项目中,我想在视图中实现跟踪工具提示(通常占据主框架窗口大部分的选项卡式视图窗口)。所以,在课堂MyAppView,我有一个成员CToolTipCtrl tooltip。函数MyAppView::OnInitialUpdate() 包含初始化
BOOL ok0 = tooltip.Create(this, TTS_ALWAYSTIP);
CRect clientRect; GetClientRect(&clientRect);
BOOL ok2 = tooltip.AddTool(this, LPSTR_TEXTCALLBACK, &clientRect, 1234/*tool ID*/);
tooltip.Activate(TRUE);
使视图的整个客户区成为“工具”。消息映射包含一个条目
ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnNeedToolTipText)
函数OnNeedToolTipText定义为
BOOL MyAppView::OnNeedToolTipText(UINT id, NMHDR *pNMHDR, LRESULT *pResult)
{
UNREFERENCED_PARAMETER(id);
NMTTDISPINFO *pTTT = (NMTTDISPINFO *)pNMHDR;
UINT_PTR nID = pNMHDR->idFrom;
BOOL bRet = FALSE;
if(nID == 1234)
{
// Come here when text is needed for tracking tooltip
}
if(pTTT->uFlags & TTF_IDISHWND)
{
// idFrom is actually the HWND of the tool
nID = ::GetDlgCtrlID((HWND)nID);
if(nID)
{
_stprintf_s(pTTT->szText, sizeof(pTTT->szText) / sizeof(TCHAR),
_T("Control ID = %d"), nID);
pTTT->hinst = AfxGetResourceHandle();
bRet = TRUE;
}
}
*pResult = 0;
return bRet;
}
仅将鼠标放在菜单项(文件、编辑、视图、窗口、帮助)上会导致代码输入OnNeedToolTipText,ID 为 0-5。将鼠标移到客户区(视图)中没有任何作用。
如何让工具提示仅显示在视图的客户区?
Visual Studio 2017; C++; 64 位 Windows 7
【问题讨论】:
-
我已经检查了我的观点之一。我没有创建工具提示。我只
EnableToolTips( )让 MFC 完成剩下的工作。提示跟随我的鼠标。 -
@lakeweb:我尝试删除工具提示成员和
Create等,并在MyAppView::OnInitialUpdate中添加EnableToolTips(TRUE);,我得到与以前相同的结果:工具提示仅在菜单上吧。
标签: c++ mfc tooltip mdi docview