zoukankan      html  css  js  c++  java
  • 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('
    '),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

  • 相关阅读:
    剑指 Offer 46. 把数字翻译成字符串
    剑指 Offer 45. 把数组排成最小的数
    1319.连通网络的操作次数-并查集
    数字序列中某一位的数字
    989.数组形式的整数加法
    java多线程
    剑指offer 48 -最长不含重复字符的子字符串 动态规划
    springboot 使用 lombok插件中的@data 注解
    netty 转发服务
    在静态方法中获取properties /yml 配置文件中的信息
  • 原文地址:https://www.cnblogs.com/haoyuanyuan/p/3168892.html
Copyright © 2011-2022 走看看