网页对这个的介绍也不少,但是都是转载。。都不能成功实现要求!!
本人亲自实验。。特发代码。。
第一种方法。
.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
}
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
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 str;
str.Format(_T("%d"),m_Slider.GetPos());
wcscpy(pTTT->lpszText, str);
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);
}