在对话框中加入工具条并让工具条上的按钮出现提示文本的方法
1>先用资源编辑器创建一个toolbar,设置按钮,并在按钮的属性
prompt中输入要提示的文本,格式为:"\n文本"
2>在对话框中添加一个CToolBar成员变量m_Toolbar
CToolBar m_Toolbar;
3>在OnInitDialog加入如下代码:
//Create the Toolbar
if(!m_Toolbar.CreateEx(this,TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC)
|| !m_Toolbar.LoadToolBar(IDR_TOOLBAR1))
{
return FALSE;
}
//以下这句必不可少,用来给工具条安排位置
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
//4>关键步骤,使提示功能生效
BEGIN_MESSAGE_MAP(CDialogDlg, CDialog)
//.......
//.......
ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnToolTipText)
//.......
//.......
END_MESSAGE_MAP()
// OnToolTipText函数的声明和定义
//声明:
afx_msg BOOL OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult);
//定义:(考虑了字符集不同的情况)
BOOL CDrawerDlg::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)
{
ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);
TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
CString strTipText;
UINT_PTR nID = pNMHDR->idFrom;
if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
{
nID = ::GetDlgCtrlID((HWND)nID);
}
if (nID != 0)
{
strTipText.LoadString((UINT)nID);
strTipText = strTipText.Mid(strTipText.Find(_T("\n"),0)+1);
if (pNMHDR->code == TTN_NEEDTEXTA)
{
_wcstombsz(pTTTA->szText, strTipText,sizeof(pTTTA->szText));
}
else
{
lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
}
*pResult = 0;
return TRUE;
}
return FALSE;
}
由以上的叙述,也给为对话框上的按钮添加文本提示提供了另一种方法:
假设对话框上放置了一个按钮,ID为ID_TEST,可以在stringtable中添加一个字符串,ID为ID_TEST,值为"测试"
接下来依上所述添加OnToolTipText函数的声明和定义以及消息映射,就ok了,当鼠标靠近该按钮时,将会出现该按钮的文本提示。