首先,需要具备几个条件,一是工具栏具有CBRS_TOOLTIPS风格,二是工具栏的父窗口需要处理TTN_NEEDTEXT通知消息.在MFC类库中,CFrameWnd默认处理了TTN_NEEDTEXT通知消息,因此在文档视图结构的应用程序中,只要工具栏拥有CBRS_TOOLTIPS风格,就能显示提示信息.
如果在对话框中添加TTN_NEEDTEXT通知消息,需要消息映射部分添加如下代码:
ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnToolTipNotify)
函数原型:
OnToolTipNotify(UINT id,NMHDR *pNMHDR,LRESULT *pResult)
参数说明:
id:是发送消息的控件ID,但此处没有用,因为控件ID可以来自于pNMHDR.
pNMHDR:是一个NMHDR结构指针(实际应该是NMTTDISPINFO结构指针),NMHDR结构记录了发送消息的控件ID,句柄等信息.
pResult:表示结果代码指针,TTN_NEEDTEXT消息可以忽略该参数.
实现过程:
定义一个CToolBar变量m_wndToolBar,创建一个工具栏资源.
在OnInitDialog方法中创建工具栏:
//创建工具栏
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS |CBRS_SIZE_DYNAMIC|CBRS_BORDER_TOP ) ||
!m_wndToolBar.LoadToolBar(IDR_TOOLBAR1))
{
TRACE0("Failed to create toolbar/n");
return -1; // fail to create
}
//设置图象和按钮的大小,为了适当的演示按钮文本
m_wndToolBar.GetToolBarCtrl().SetBitmapSize(CSize(16,16));
m_wndToolBar.GetToolBarCtrl().SetButtonSize(CSize(32,32));
//设置按钮文本
m_wndToolBar.SetButtonText(0,"新建");
m_wndToolBar.SetButtonText(1,"打开");
m_wndToolBar.SetButtonText(2,"保存");
m_wndToolBar.SetButtonText(4,"剪切");
m_wndToolBar.SetButtonText(5,"复制");
m_wndToolBar.SetButtonText(6,"粘贴");
m_wndToolBar.SetButtonText(8,"打印");
m_wndToolBar.SetButtonText(10,"帮助");
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
在消息影射部分添加消息映射:
ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipNotify)
接收函数部分:
afx_msg BOOL OnToolTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult );
函数实现:一种
BOOL CMainFrame::OnToolTipNotify(UINT id, NMHDR *pNMHDR, LRESULT *pResult)
{
TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
UINT nID =pNMHDR->idFrom; //获取工具栏按钮ID
int index = m_wndToolBar.GetToolBarCtrl().CommandToIndex(nID);//根据ID获取按钮索引
CString str;
switch(index)
{
case 0:
pTTT->lpszText = "检测窗口";
break;
case 1:
pTTT->lpszText = "分析窗口";
break;
case 2:
pTTT->lpszText = "网络连接";
break;
case 3:
pTTT->lpszText = "显示图像";
break;
case 4:
pTTT->lpszText = "开始录像";
break;
case 5:
pTTT->lpszText = "存入数据库";
break;
case 6:
pTTT->lpszText = "读取数据库文件";
break;
case 7:
pTTT->lpszText = "阀位分析查询";
break;
case 8:
pTTT->lpszText = "报表打印";
break;
default:
pTTT->lpszText = "什么东西?";
break;
}
pTTT->hinst = AfxGetResourceHandle();
return(TRUE);
}
另一种:
BOOL CToolHintDlg::OnToolTipNotify(UINT id, NMHDR *pNMHDR, LRESULT *pResult)
{
TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
UINT nID =pNMHDR->idFrom; //获取工具栏按钮ID
int index = m_wndToolBar.GetToolBarCtrl().CommandToIndex(nID);//根据ID获取按钮索引
m_wndToolBar.GetButtonText(index,m_ToolText);//获取按钮文本
pTTT->lpszText =m_ToolText.GetBuffer(0);//设置显示的提示信息
pTTT->hinst = AfxGetResourceHandle();
return(TRUE);
}