MFC 进修之 鼠标移动到Toolbar按钮上显示提示信息(tooltip),状况栏也随之改变
添加时间:2013-7-3 点击量:
1.在ResourceView里参加Toolbar资料,定名IDR_TOOLBAR1
2、在主法度的.h文件中参加变量:
          CToolBar m_toolbar;CImageList img;
3、在主法度中.h文件中的BEGIN_MESSAGE_MAP(CDetectorDlg,CDialog)函数中参加:
        ON_NOTIFY_EX( TTN_NEEDTEXT,0,OnToolTipText)
3、在主法度中.h文件中添加消息函数:
afx_msg BOOL OnToolTipText(UINT, NMHDR pTTTStruct, LRESULT pResult);
4、创建一个Toolbar对象   详见《MFC 进修之 对象栏》
5.在主法度的.cpp文件中编译函数OnToolTipText//使对象栏显示提示信息
 
BOOL CDormDlg::OnToolTipText(UINT, NMHDR pTTTStruct, LRESULT pResult)
{
ASSERT(pTTTStruct->code == TTN_NEEDTEXTA || pTTTStruct->code == TTN_NEEDTEXTW);
//UNICODE消息
TOOLTIPTEXTA pTTA=(TOOLTIPTEXT)pTTTStruct;
TOOLTIPTEXTW pTTW=(TOOLTIPTEXTW)pTTTStruct;
 
CString strTipText,strStatus;
UINT nID = pTTTStruct->idFrom;
if(pTTTStruct->code == TTN_NEEDTEXTA &&(pTTA->uFlags & TTF_IDISHWND) ||
pTTTStruct->code ==TTN_NEEDTEXTW &&(pTTW->uFlags & TTF_IDISHWND))
{
//strStatus.Format("%d",1);
nID = ::GetDlgCtrlID((HWND)nID);
}
 
if(nID != 0)//不为分隔符
{
// AfxMessageBox("1111111111");
strTipText.LoadString(nID);
strTipText = strTipText.Mid(strTipText.Find(_T(\n),0)+1);
#ifndef _UNICODE
if (pTTTStruct->code == TTN_NEEDTEXTA)
{
lstrcpyn(pTTA->szText,strTipText,sizeof(pTTA->szText));
//AfxMessageBox(pTTA->szText);
m_bar.SetPaneText(0,pTTA->szText);
}
else
{
_mbstowcsz(pTTW->szText,strTipText,sizeof(pTTW->szText));
//m_bar.SetPaneText(0,"伏贴");
}
#else
if(pTTTStruct->code == TTN_NEEDTEXTA)
{
_wcstombsz(pTTA->szText,strTipText,sizeof(pTTA->szText)) ;
m_bar.SetPaneText(0,pTTA->szText);
}
else
{
lstrcpyn(pTTW->szText,strTipText,sizeof(pTTW->szText));
m_bar.SetPaneText(0,"伏贴");
}
 
#endif
pResult = 0;
::SetWindowPos(pTTTStruct->hwndFrom,HWND_TOP,0,0,0,0,SWP_NOACTIVATE |
SWP_NOSIZE |SWP_NOMOVE |SWP_NOOWNERZORDER);
//m_bar.SetPaneText(0,"伏贴");
return TRUE;
}
return TRUE;
}
 
6.在ResourceView的String资料里,将对象栏中每个按钮的ID都对应上显示的提示信息即可
7、结果图
容易发怒的意思就是: 别人做了蠢事, 然后我们代替他们, 表现出笨蛋的样子。—— 蔡康永
1.在ResourceView里参加Toolbar资料,定名IDR_TOOLBAR1
2、在主法度的.h文件中参加变量:
          CToolBar m_toolbar;CImageList img;
3、在主法度中.h文件中的BEGIN_MESSAGE_MAP(CDetectorDlg,CDialog)函数中参加:
        ON_NOTIFY_EX( TTN_NEEDTEXT,0,OnToolTipText)
3、在主法度中.h文件中添加消息函数:
afx_msg BOOL OnToolTipText(UINT, NMHDR pTTTStruct, LRESULT pResult);
4、创建一个Toolbar对象   详见《MFC 进修之 对象栏》
5.在主法度的.cpp文件中编译函数OnToolTipText//使对象栏显示提示信息
 
BOOL CDormDlg::OnToolTipText(UINT, NMHDR pTTTStruct, LRESULT pResult)
{
ASSERT(pTTTStruct->code == TTN_NEEDTEXTA || pTTTStruct->code == TTN_NEEDTEXTW);
//UNICODE消息
TOOLTIPTEXTA pTTA=(TOOLTIPTEXT)pTTTStruct;
TOOLTIPTEXTW pTTW=(TOOLTIPTEXTW)pTTTStruct;
 
CString strTipText,strStatus;
UINT nID = pTTTStruct->idFrom;
if(pTTTStruct->code == TTN_NEEDTEXTA &&(pTTA->uFlags & TTF_IDISHWND) ||
pTTTStruct->code ==TTN_NEEDTEXTW &&(pTTW->uFlags & TTF_IDISHWND))
{
//strStatus.Format("%d",1);
nID = ::GetDlgCtrlID((HWND)nID);
}
 
if(nID != 0)//不为分隔符
{
// AfxMessageBox("1111111111");
strTipText.LoadString(nID);
strTipText = strTipText.Mid(strTipText.Find(_T(\n),0)+1);
#ifndef _UNICODE
if (pTTTStruct->code == TTN_NEEDTEXTA)
{
lstrcpyn(pTTA->szText,strTipText,sizeof(pTTA->szText));
//AfxMessageBox(pTTA->szText);
m_bar.SetPaneText(0,pTTA->szText);
}
else
{
_mbstowcsz(pTTW->szText,strTipText,sizeof(pTTW->szText));
//m_bar.SetPaneText(0,"伏贴");
}
#else
if(pTTTStruct->code == TTN_NEEDTEXTA)
{
_wcstombsz(pTTA->szText,strTipText,sizeof(pTTA->szText)) ;
m_bar.SetPaneText(0,pTTA->szText);
}
else
{
lstrcpyn(pTTW->szText,strTipText,sizeof(pTTW->szText));
m_bar.SetPaneText(0,"伏贴");
}
 
#endif
pResult = 0;
::SetWindowPos(pTTTStruct->hwndFrom,HWND_TOP,0,0,0,0,SWP_NOACTIVATE |
SWP_NOSIZE |SWP_NOMOVE |SWP_NOOWNERZORDER);
//m_bar.SetPaneText(0,"伏贴");
return TRUE;
}
return TRUE;
}
 
6.在ResourceView的String资料里,将对象栏中每个按钮的ID都对应上显示的提示信息即可
7、结果图