可以通过TTN_NEEDTEXT消息的处理函数OnToolTipNotify来实现设置工具栏按钮提示的功能。首先创建工具栏,然后调用SetButtonText方法设置工具栏按钮的显示文本。
语法格式:BOOL SetButtonText(int nIndex,LPCTSTR lpszText);
然后在OnToolTipNotify消息处理函数中获得当前按钮问问,并在提示窗口中显示出来,获得按钮文本可以使用GetButtonText方法。
语法格式: CString GetButtonText(int nIndex) const;
void GetButtonText(int nIndex,CString&rString)const;
例子:1.创建一个基于对话框的应用程序;
2.导入8个图标资源;
3.在对话框头文件中声明变量:
CToolBar m_ToolBar; //工具栏对象
CImageList m_ImageList; //列表视图对象
CString m_TipText; //工具栏提示文本
4.在对话框的OnInitDialog函数中创建工具栏:
m_ImageList.Create(32, 32, ILC_COLOR24 | ILC_MASK, 1, 1); //创建图像列表
m_ImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON1)); //向图像列表中添加图标
m_ImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON2));
m_ImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON3));
m_ImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON4));
m_ImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON5));
m_ImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON6));
m_ImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON7));
m_ImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON8));
UINT array[11]; //声明数组
for (int i = 0; i < 11; i++) //根据数组元素的个数进行循环
{
if (i == 3 || i == 7 || i == 9) //判断是否为第4、8、10个按钮
array[i] = ID_SEPARATOR; //第4、8、10个按钮设为分隔条
else
array[i] = i + 1001; //为数组元素赋值
}
m_ToolBar.Create(this); //创建工具栏窗口
m_ToolBar.SetButtons(array, 11); //设置工具栏按钮的索引
m_ToolBar.SetButtonText(0,_T("新建")); //设置工具栏文本
m_ToolBar.SetButtonText(1, _T("打开"));
m_ToolBar.SetButtonText(2, _T("保存"));
m_ToolBar.SetButtonText(4, _T("剪切"));
m_ToolBar.SetButtonText(5, _T("复制"));
m_ToolBar.SetButtonText(6, _T("粘贴"));
m_ToolBar.SetButtonText(8, _T("打印"));
m_ToolBar.SetButtonText(10, _T("帮助"));
m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList); //关联图像列表
m_ToolBar.SetSizes(CSize(40, 40), CSize(32, 32)); //设置按钮和图标大小
m_ToolBar.EnableToolTips(1); //激活工具栏的提示功能
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0); //显示工具栏
5.在对话框的头文件中声明OnToolTipNotify函数:
afx_msg BOOL OnToolTipNotify(UINT id,NMHDR*pNMHDR,LRESULT*pResult);
6.在对话框的源文件中添加ON_NOTIFY_EX映射宏:
ON_NOTIFY_EX(TTN_NEEDTEXT,0, OnToolTipNotify)
7.添加消息处理函数OnToolTipNotify的实现部分:
BOOL CToolBarDlg::OnToolTipNotify(UINT id, NMHDR*pNMHDR, LRESULT*pResult)
{
TOOLTIPTEXT*pTTT = (TOOLTIPTEXT*)pNMHDR;
UINT nID = pNMHDR->idFrom; //获取工具栏按钮ID
if (nID)
{
UINT nIndex = m_ToolBar.CommandToIndex(nID); //根据ID获取按钮索引
if (-1 != nIndex) //判断索引是否正确
{
m_ToolBar.GetButtonText(nIndex, m_TipText); //获取工具栏文本
pTTT->lpszText = m_TipText.GetBuffer(m_TipText.GetLength()); //设置提示文本信息
pTTT->hinst = AfxGetResourceHandle(); //获得资源句柄
return true;
}
}
return false;
}