创建了一个基于Dialog的MFC工程,并添加了工具栏,想要实现以下效果:
工具栏资源的每个Buttond的Prompt都设置了对应的提示信息,按以下步骤实现该效果
第一步,添加工具栏并显示
if((!m_Toolbar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP | CBRS_TOOLTIPS, CRect(0, 0, 0, 0), AFX_IDW_TOOLBAR))||(!m_Toolbar.LoadToolBar(IDR_TOOLBAR)))
{
TRACE("Failed to create toolbar\n");
return -1;
}
m_Toolbar.GetToolBarCtrl().SetBitmapSize(CSize(16, 16));
m_Toolbar.GetToolBarCtrl().SetButtonSize(CSize(30, 22));
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
注意,要加上“CBRS_TOOLTIPS”属性。
第二步,在.h中添加消息映射
BEGIN_MESSAGE_MAP(CPCL_3DViewDlg, CDialogEx)
ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnToolTipText)
END_MESSAGE_MAP()
afx_msg BOOL OnToolTipText(UINT NID, NMHDR* pNMHDR, LRESULT* pResult);
第三步,在.cpp中实现OnToolTipText方法
BOOL OnToolTipText(UINT NID, NMHDR* pNMHDR, LRESULT* pResult)
{
ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);
//UNICODE消息
TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
//TCHAR szFullText[512]
CString strTipText;
UINT nID = pNMHDR->idFrom;
if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
{
//idFrom为工具条的HWMD
nID = ::GetDlgCtrlID((HWND)nID);
}
if (nID != 0) //不是分隔符
{
strTipText.LoadString(nID);
strTipText = strTipText.Mid(strTipText.Find('\n', 0) + 1);
#ifndef _UNICODE
if (pNMHDR->code == TTN_NEEDTEXTA)
{
lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText));
}
else
{
_mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
}
#ele
if (pNMHDR->code == TTN_NEEDTEXTA)
{
_wcstombsz(pTTTA->szText, strTipText, sizeof(pTTTA->szText));
}
else
{
lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
}
#endif
*pResult=0;
//使工具条在提示窗口最上面
::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE |
SWP_NOSIZE | SWP_NOMOVE | SWP_NOOWNERZORDER);
return TRUE;
}
return TRUE;
}
以上!
转载:https://blog.csdn.net/weixin_39135630/article/details/102484935
查看评论