动态创建工具栏并启用Tooltip的步骤可参考: MFC对话框中的工具栏、状态栏设计小结
然而,该方法的提示信息显示乱码,主要原因是程序启用unicode字符集,CString::GetBuffer函数返回LPTSTR,定义了Unicode宏的情况下为LPWSTR,奇怪的是在VS2010下就是有问题。
正确的做法是修改消息响应函数OnToolTipNotify部分的代码如下:
BOOL Cwar3Dlg::OnToolTipNotify(UINT id, NMHDR *pNMHDR, LRESULT *pResult)
{
//TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
NMTTDISPINFO *pTTT = (NMTTDISPINFO *) pNMHDR;
UINT nID =pNMHDR->idFrom; //获取工具栏按钮ID
if(nID)
{
nID = m_wndToolBar.CommandToIndex(nID); //根据ID获取按钮索引
if(nID != -1)
{
CString str;
m_wndToolBar.GetButtonText(nID,str); //获取工具栏文本
//pTTT->lpszText = str.GetBuffer(str.GetLength()); //该方式显示乱码。
pTTT->lpszText = (LPWSTR)(LPCTSTR)str; //设置提示信息文本
pTTT->hinst = AfxGetResourceHandle();
return(TRUE);
}
}
return(FALSE);
}