小言_互联网的博客

基于Dialog的MFC工程显示工具栏的提示信息

243人阅读  评论(0)

创建了一个基于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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场