参考:http://wenku.baidu.com/view/5821795e3b3567ec102d8a6b.html (推荐读一读这篇文章)
参考:http://bbs.csdn.net/topics/190108914
Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源
我们常用的CSliderCtrl的话,都是为向右累加 或 向下累加:
要实现逆向的话,不能直接实现的了,下边介绍一种使用了的方法。
我们使用Slider是为了获取一个范围,需要:
获取范围 & 同时我们也会要指定一个缺省的范围 & 再一点,我们需要自己定制ToolTips提示
假如我们设置的范围是[0,100]
1. 自己定义两个函数: 完成转换
void CXXXDialog::SetRangePos(int iPos)
{
m_slider.SetPos(100 - iPos);
}
int CXXXDialog::GetRangePos()
{
return 100 - m_slider.GetPos();
}
2. 定制tooltips :需要Slider控件的属性Tooltips为True
Slider控件本身就带有Tooltips,我们只要添加Tooltips响应处理即可
(据参考文档上介绍,所有的CWnd都在pThreadState里面放的有Tooltips,都可以轻松实现Tooltips提醒)
a. 定义事件响应
ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnToolTipNotify);
b.定义响应函数中的处理:
BOOL CXXXDialog::OnToolTipNotify(UINT id, NMHDR * pNMHDR, LRESULT * pResult) { TOOLTIPTEXT *pToolTipText = (TOOLTIPTEXT *)pNMHDR; UINT nID =pNMHDR->idFrom; if (pToolTipText->uFlags & TTF_IDISHWND) { // idFrom is actually the HWND of the tool UINT nCtrlID = ::GetDlgCtrlID((HWND)nID); <strong>if(nCtrlID == IDC_SLIDER_XXX)</strong> { // 这里就是你要显示的Tooltips,可以根据需要来定制 CString strToolTips; strToolTips.Format(_T("%d"), GetRangePos()); _tcscpy(pToolTipText->lpszText, strToolTips); pToolTipText->hinst = NULL; return(TRUE); } } return(FALSE); }