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,其他控件也可以用這個方法來實現。
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/