slider控件移动滑块,动态的显示tooltip方法!

来源:互联网 发布:网络电视直播在线 编辑:程序博客网 时间:2024/06/05 03:54

网页对这个的介绍也不少,但是都是转载。。都不能成功实现要求!!

本人亲自实验。。特发代码。。

 

第一种方法。

.h  文件

CSliderCtrl m_Slider;
CToolTipCtrl m_tooltip;
afx_msg BOOL OnToolTipNotify(UINT id,NMHDR *pNMHDR,LRESULT *pResult);

.cpp

 

BEGIN_MESSAGE_MAP(CCToolTipDlg, CDialog)

 

ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnToolTipNotify) //添加消息

 

END_MESSAGE_MAP()

 

OnInitDialog()

m_Slider.SetRange(0,100);
 m_Slider.SetPos(50);
 m_tooltip.Create(GetDlgItem(IDC_SLIDER1));

m_tooltip.AddTool(GetDlgItem(IDC_SLIDER1), LPSTR_TEXTCALLBACK); //注释:红色表示tip内容可以动态改变!!

 

PreTranslateMessage(MSG* pMsg)

m_tooltip.RelayEvent(pMsg);  
 return CDialog::PreTranslateMessage(pMsg);

 

OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) //响应滑块拖动跟新

 CSliderCtrl* pSlider=(CSliderCtrl*)pScrollBar;
 int pos=pSlider->GetPos();
 if (pScrollBar == (CScrollBar*)GetDlgItem(IDC_SLIDER1))
 {

m_tooltip.Update();//更新tip,会触发TTN_NEEDTEXT消息 

CDialog::OnHScroll(nSBCode, nPos, pScrollBar);

 //面是实现定制Tooltips的函数,也就是相应TTN_NEEDTEXT的消息函数:

BOOL CCToolTipDlg::OnToolTipNotify(UINT id,NMHDR *pNMHDR,LRESULT *pResult)
{
    TOOLTIPTEXT  
*pTTT  =   (TOOLTIPTEXT  *)pNMHDR;
    UINT   nID  
= pNMHDR-> idFrom;
   
if   (pTTT-> uFlags  &   TTF_IDISHWND)
    {
        nID  
=   ::GetDlgCtrlID((HWND)nID);
       
if(nID==IDC_SLIDER1)//如果现在这个ID是你要显示Tip的控件
        { 
             CString strToolTips;
            strToolTips.Format(_T(
"总共500帧,当前是第%d帧"),m_Slider.GetPos());
            wcscpy(pTTT
->lpszText, strToolTips);
           
return TRUE;
        }
    }
   
return FALSE;

第二种方法。

.h  文件

CSliderCtrl m_Slider;
CToolTipCtrl m_tooltip;

afx_msg void OnNMCustomdrawSlider1(NMHDR *pNMHDR, LRESULT *pResult); //响应slider的自绘消息

.cpp

BEGIN_MESSAGE_MAP(CCToolTipDlg, CDialog)

 

ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER1, &CCToolTipDlg::OnNMCustomdrawSlider1) //添加消息

 

END_MESSAGE_MAP()

 

BOOL   CCToolTipDlg::OnInitDialog

        m_Slider.SetRange(0,100);
        m_Slider.SetPos(50);
        m_tooltip.Create(this);  
        m_tooltip.AddTool(GetDlgItem(IDC_SLIDER1),   TTS_ALWAYSTIP);

}

PreTranslateMessage(MSG* pMsg)

m_tooltip.RelayEvent(pMsg);  
 return CDialog::PreTranslateMessage(pMsg);

 

OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) //响应滑块拖动跟新

 CSliderCtrl* pSlider=(CSliderCtrl*)pScrollBar;
 int pos=pSlider->GetPos();
 if (pScrollBar == (CScrollBar*)GetDlgItem(IDC_SLIDER1))
 {

m_tooltip.Update();//更新tip

 

OnCustomdrawSlider(NMHDR*   pNMHDR,   LRESULT*   pResult)  
{
CString   str;

str.Format( "%d ",   m_Slider.GetPos());
m_tooltip.UpdateTipText(str,     GetDlgItem(IDC_SLIDER1));

*pResult   =   0;
}

到此这两种方法都是可以实现。。拖动滑块并动态显示tip。。大家可以看暴风影音的声音控制滑块就明白了,这个是一样的效果。。

 

大家有疑问可以留言~~欢迎交流!!

CDialog::OnHScroll(nSBCode, nPos, pScrollBar);