在VC中给Slider添加定制的Tooltips

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值