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

    容易发怒的意思就是: 别人做了蠢事, 然后我们代替他们, 表现出笨蛋的样子。—— 蔡康永
    分享到: