程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 在VC中給Slider添加定制的Tooltips

在VC中給Slider添加定制的Tooltips

編輯:vc教程

  VC中的Slider的Tooltips只能顯示表示當前位置的int型值,可是有時候,這種Tooltips並不夠用。比如,在一個視頻錄制的小軟件中,可能會需要類似“總共500幀,當前是第13幀”的Tooltips;或者有些時候想在Tooltips中顯示float型的值。

  在這些時候我們就只能用CToolTipCtrl配合TTN_NEEDTEXT消息來實現我們的定制Tooltips。

  下面用一個小例子來具體說明:

        首先,給Slider映射一個Control型變量,本例中為:

CSliderCtrl m_slider;  //  ID為IDC_SLIDERTEST

         然後,添加CToolTipCtrl變量和相應TTN_NEEDTEXT的消息函數:

CToolTipCtrl m_tooltips;

BOOL OnToolTipNotify(UINT id, NMHDR * pNMHDR, LRESULT * pResult);

         在cpp文件的消息映射中加入以下代碼:

ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnToolTipNotify)

         在初始化函數中,添加以下代碼:

m_slider.SetRange(0, 500, TRUE);
m_slider.SetPos(0);

//  創建Tooltips
m_tooltips.Create(GetDlgItem(IDC_SLIDERTEST));
m_tooltips.Activate(TRUE);

         在OnHScroll函數中添加:

if (pScrollBar == (CScrollBar*)GetDlgItem(IDC_SLIDERTEST))
    m_tooltips.Update();  //  更新Tooltips,會觸發TTN_NEEDTEXT消息

        下面是實現定制Tooltips的函數,也就是相應TTN_NEEDTEXT的消息函數:

BOOL OnToolTipNotify(UINT id, NMHDR * pNMHDR, LRESULT * pResult)
{
    TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
    UINT nID =pNMHDR->idFrom;
    if (pTTT->uFlags & TTF_IDISHWND)
    {
          // idFrom is actually the HWND of the tool
          nID = ::GetDlgCtrlID((HWND)nID);
          if(nID)
          {
               //  這裡就是你要顯示的Tooltips,可以根據需要來定制
               CString strToolTips;
               strToolTips.Format("總共500幀,當前是第%d幀", m_slider.GetPos());
  
               strcpy(pTTT->lpszText, strToolTips);
               pTTT->hinst = NULL;
               return(TRUE);
           }
    }

    return(FALSE);
}

這種方法不僅僅可以實現Slider的定制Tooltips,其他控件也可以用這個方法來實現。

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved