CSliderCtrl逆向调整&CTooltips响应--向左累加或向上累加


参考: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);
		if(nCtrlID == IDC_SLIDER_XXX)
		{
			//  这里就是你要显示的Tooltips,可以根据需要来定制
			CString strToolTips;
			strToolTips.Format(_T("%d"), GetRangePos());
			_tcscpy(pToolTipText->lpszText, strToolTips);
			pToolTipText->hinst = NULL;
			return(TRUE);
		}
	}
	return(FALSE);
}

 

 

 

你可能感兴趣的:(C++)