MFC 学习之 鼠标移动到Toolbar按钮上显示提示信息(tooltip),状态栏也随之改变

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)
1
3、在主程序中.h文件中添加消息函数:
afx_msg BOOL OnToolTipText(UINT, NMHDR *pTTTStruct, LRESULT *pResult);
2
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都对应上希望显示的提示信息即可

3
7、效果图4

posted @ 2013-07-03 10:10  记忆斑驳的时光  阅读(2969)  评论(0编辑  收藏  举报