Dialog中加入一个工具栏如果让它有提示信息

类别:VC语言 点击:0 评论:0 推荐:

工具栏一般使用在SDI或是MDI里。

如果我们在一个Dialog里新建了一个工具栏,它的提示信息可能就没有办法出来了。

主要的原因是由于我们没有为这个工具栏写提示信息的消息映射函数。

如果要增加的话。就可以这样。

1.增加一个这样的函数处理函数

afx_msg BOOL OnToolTipText( UINT id, NMHDR * pNMHDR, LRESULT * pResult );

BOOL MyDialog::OnToolTipText( UINT id, NMHDR * pNMHDR, LRESULT * pResult )
{
 ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);
 
 // allow top level routing frame to handle the message
 if (GetRoutingFrame() != NULL)
  return FALSE;
 
 // need to handle both ANSI and UNICODE versions of the message
 TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
 TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
 TCHAR szFullText[256];
 CString strTipText;
 UINT_PTR nID = (UINT_PTR)pNMHDR->idFrom;
 if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
  pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
 {
  // idFrom is actually the HWND of the tool
  nID = ((UINT_PTR)(WORD)::GetDlgCtrlID((HWND)nID));
 }
 
 if (nID != 0) // will be zero on a separator
 {
  AfxLoadString((UINT)nID, szFullText);
  // this is the command id, not the button index
  AfxExtractSubString(strTipText, szFullText, 1, '\n');
 }
#ifndef _UNICODE
 if (pNMHDR->code == TTN_NEEDTEXTA)
  lstrcpyn(pTTTA->szText, strTipText,
  (sizeof(pTTTA->szText)/sizeof(pTTTA->szText[0])));
 else
 {
  int n = MultiByteToWideChar(CP_ACP, 0, strTipText, -1, pTTTW->szText,
   sizeof(pTTTW->szText)/sizeof(pTTTW->szText[0]));
  if (n > 0)
   pTTTW->szText[n-1] = 0;
 }
#else
 if (pNMHDR->code == TTN_NEEDTEXTA)
 {
  int n = WideCharToMultiByte(CP_ACP, 0, strTipText, -1,
   pTTTA->szText, sizeof(pTTTA->szText)/sizeof(pTTTA->szText[0]),
   NULL, NULL);
  if (n > 0)
   pTTTA->szText[n-1] = 0;
 }
 else
  lstrcpyn(pTTTW->szText, strTipText,
  (sizeof(pTTTW->szText)/sizeof(pTTTW->szText[0])));
#endif
 *pResult = 0;
 
 // bring the tooltip window above other popup windows
 ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,
  SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE);
 
 return TRUE;    // message was handled
}

2.增加一个头文件

#include <afxpriv.h>

3.创建消息映射

 ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)
 ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText)

这样就行了。

本文地址:http://com.8s8s.com/it/it112.htm