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、结果图




