我一直无法找到简明的代码块,它允许我向CStatic(和CLed)控件添加/显示工具提示。显然,这样做的标准代码不适用于这种类型的控制。有人可以发布代码片段吗?将工具提示添加到CStatic中
10
A
回答
9
我希望这段代码能解决你的问题。重要的是使NOTIFY属性为CStatic = TRUE。
if(!m_ToolTip.Create(this))
{
TRACE0("Unable to create the ToolTip!");
}
else
{
CWnd* pWnd = GetDlgItem(IDC_STATIC_MASTER_PWD);
m_ToolTip.AddTool(pWnd,"Ok");
m_ToolTip.Activate(TRUE);
}
让我知道是否有问题。
+0
我需要执行此操作* plus *在[m_skipper的答案](https://stackoverflow.com/a/33772406/3549027)中实现一个'PreTranslateMessage'处理程序,然后才能正常工作。也可以指出'm_ToolTip'是一个'CToolTipCtrl'。 – dlf
1
我已经使用这个简单的类多提示成功:
工具提示创建一个类:
class ToolTip
{
public:
static HWND CreateToolTip(int toolID, HWND hDlg, UINT id);
};
下,实现提示创建功能:
HWND ToolTip::CreateToolTip(int toolID, HWND hDlg, UINT id)
{
if (!toolID || !hDlg || !id)
{
return FALSE;
}
CString strTTText;
strTTText.LoadString(id);
// Get the window handle of the control to attach the TT to.
HWND hwndTool = ::GetDlgItem(hDlg, toolID);
// Create the tooltip window
HWND hwndTip = CreateWindowEx(NULL, TOOLTIPS_CLASS, NULL,
WS_POPUP |TTS_ALWAYSTIP,// | TTS_BALLOON,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
hDlg, NULL,
AfxGetInstanceHandle() , NULL);
if (!hwndTool || !hwndTip)
{
return (HWND)NULL;
}
// Associate the tooltip with the tool.
TOOLINFO toolInfo = { 0 };
toolInfo.cbSize = sizeof(toolInfo);
toolInfo.hwnd = hDlg;
toolInfo.uFlags = TTF_IDISHWND | TTF_SUBCLASS;
toolInfo.uId = (UINT_PTR)hwndTool;
toolInfo.lpszText = (char*)(LPCTSTR)strTTText;
::SendMessage(hwndTip, TTM_ADDTOOL, 0, (LPARAM)&toolInfo);
::SendMessageA(hwndTip, TTM_SETMAXTIPWIDTH, 0, 40); // force multi-line
return hwndTip;
}
呼叫它在InitDialog的某处:
CMyDialog::InitDialog()
{
ToolTip::CreateToolTip(PickAUniqueNumber, m_hWnd, IDS_MY_RESOURCE_STRING);
}
2
当我在基于对话框自动创建MFC应用程序中添加静态控件,工具提示不显示,直到我在预翻译对话消息添加RelayEvent
BOOL CTooltipStaticDlg::PreTranslateMessage(MSG* pMsg)
{
m_ToolTip.RelayEvent(pMsg);
return CDialog::PreTranslateMessage(pMsg);
}
0
我不知道这是否仍然需要,但在这里我用什么解决问题: 只是在创建静态标签时将SS_NOTIFY添加到dwStyle。 (或者只需在属性中设置“Nofity”“True”)。这对我来说很好。
0
我已经在我的对话框标签上分配了自定义标识IDC_PATH。我需要打开通知标签的标志(SS_NOTIFY),我需要重载CWnd的方法OnToolHitTest和处理这样的提示点击测试:
INT_PTR CPath::OnToolHitTest(CPoint point, TOOLINFO* pTI) const
{
INT_PTR r = CWnd::OnToolHitTest(point,pTI);
this->ClientToScreen(&point);
CRect rcLbl;
GetDlgItem(IDC_PATH)->GetWindowRect(&rcLbl);
if(rcLbl.PtInRect(point))
{
pTI->uFlags |= TTF_IDISHWND;
pTI->uFlags &= ~TTF_NOTBUTTON;
pTI->uId = (UINT_PTR)GetDlgItem(IDC_PATH)->m_hWnd;
return IDC_PATH;
}
return r;
}
然后我的对话开始接受TTN_NEEDTEXT通知,这是我处理和dynamicaly为工具提示设置文本。
BOOL CPath::OnTtnNeedText(UINT id, NMHDR *pNMHDR, LRESULT *pResult)
{
UNREFERENCED_PARAMETER(id);
TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
UINT_PTR nID = pNMHDR->idFrom;
BOOL bRet = FALSE;
if (pTTT->uFlags & TTF_IDISHWND)
{
// idFrom is actually the HWND of the tool
nID = ::GetDlgCtrlID((HWND)nID);
if(nID == IDC_PATH)
{
pTTT->lpszText = (LPSTR)(LPCTSTR)m_FullDestPath;
bRet = TRUE;
}
}
*pResult = 0;
return bRet;
}
相关问题
- 1. 添加工具提示到CStatic Ctrl
- 2. 将工具提示添加到UIbutton
- 3. 将工具提示添加到StripMenuItem C#
- 4. 将工具提示添加到组框
- 5. 添加工具提示
- 6. fullpage.js - 添加工具提示
- 7. 将工具提示添加到GTK ComboBox中的条目中?
- 8. 添加工具提示到flot图
- 9. 将工具提示添加到输入框中
- 10. Webix将工具提示添加到treetable中的特定元素
- 11. 如何将工具提示添加到Windows窗体中的“X”?
- 12. (Python)如何将工具提示添加到Pandas图中?
- 13. 如何将工具提示添加到jtable中的单元格?
- 14. 如何将工具提示添加到TeeChart的Box图中?
- 15. 将图像添加到工具提示中
- 16. 如何将空白行添加到引导工具提示中
- 17. 将行换行添加到Bootstrap中的工具提示3
- 18. 如何将工具提示添加到Winforms中的Combobox项目
- 19. 如何将工具提示添加到表格中的td
- 20. 将工具提示添加到上下文菜单中的“Word”
- 21. 让RadGrid需要将工具提示添加到列行中
- 22. 将工具提示尾部添加到CSS下拉菜单中?
- 23. 如何将提示或工具提示添加到C#Winforms中的标签?
- 24. 在Dojo Select中添加工具提示
- 25. 在Dimple.js中添加工具提示行
- 26. 将图例名称添加到JQPlot工具提示中,并在工具提示中正确格式化日期
- 27. 如何将工具提示添加到FLOT图形
- 28. 如何将工具提示添加到vb.net winforms datagrid行?
- 29. 如何将工具提示添加到jqgrid
- 30. PySide:将图像添加到工具提示
我不知道为什么这个问题得到了downvote。 MFC中的工具提示操作并不总是简单或明显的,所以这是一个非常相关的问题。 –
@MarkRansom鲁莽和无知的消极是人类生存的一个令人伤心的方面 - 这是唯一可以解释的。 –