在VC中给Slider添加定制的Tooltips

王朝vc·作者佚名  2006-07-06
宽屏版  字体: |||超大  

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,其他控件也可以用这个方法来实现。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有