如何指定滑块控制的负范围?

时间:2013-10-07 06:27:22

标签: visual-c++ mfc sdi

我正在开发基于MFC的SDI VC ++应用程序。在我的应用程序中,我需要为Slider Control指定负范围值。 Slider的最小范围是-40,最大范围是255.我使用SetRange函数尝试了它。但它没有用。如何在滑块中设置此范围?请帮助..

我的Slider代码如下: 滑块被声明为

CSliderCtrl m_ctrlECTSlider;

OnInitialUpdate函数包含

m_ctrlECTSlider.SetRangeMin(-40);
int iValMin = m_ctrlECTSlider.GetRangeMin();
m_ctrlECTSlider.SetRangeMax(255);
int iValMax = m_ctrlECTSlider.GetRangeMax();

m_ctrlECTSlider.SetPos(0);
SetDlgItemInt( IDC_ECT_VALUE, m_ctrlECTSlider.GetPos(), FALSE);
SetDlgItemInt( IDC_MIN_ECT, iValMin, FALSE);
SetDlgItemInt( IDC_MAX_ECT, iValMax, FALSE);

OnBnClickedSet函数包含

int nMin = GetDlgItemInt(IDC_MIN_ECT, 0, FALSE);
int nMax = GetDlgItemInt(IDC_MAX_ECT, 0, FALSE);

m_ctrlECTSlider.SetRange(nMin, nMax);
m_ctrlECTSlider.SetPos(nMin);

int pos = m_ctrlECTSlider.GetPos();
SetDlgItemInt(IDC_ECT_VALUE, m_ctrlECTSlider.GetPos(), FALSE);      
m_ctrlECTSlider.RedrawWindow();            

这里的问题是debugg期间返回的值都是正确的。但是当涉及到运行最小值的UI是429496而不是编辑框中的-40。为什么会这样......我正在使用CFormView类开发SDI应用程序..

提前致谢。

2 个答案:

答案 0 :(得分:2)

你的最小值是'-40',它是有符号整数,你作为无符号整数处理为'SetDlgItemInt'的最后一个参数,'GetDlgItemInt'方法是'FALSE'。 这就是为什么你得到错误的价值代替'-40'。 使用以下代码来确保正确的行为。

//用于设置值

SetDlgItemInt(IDC_ECT_VALUE,m_ctrlECTSlider.GetPos(),TRUE);

SetDlgItemInt(IDC_MIN_ECT,iValMin,TRUE);

SetDlgItemInt(IDC_MAX_ECT,iValMax,TRUE);

//如何获得价值使用

int nMin = GetDlgItemInt(IDC_MIN_ECT,0,TRUE);

int nMax = GetDlgItemInt(IDC_MAX_ECT,0,TRUE);

您可以使用此链接http://msdn.microsoft.com/en-us/library/c7t43w0s%28v=vs.90%29.aspx 了解更多详情。

答案 1 :(得分:0)

void SetRangeMin(int nMin, BOOL bRedraw = FALSE);称为:

m_Slider.SetRangeMin(0);

并将void SetRangeMax(int nMax, BOOL bRedraw = FALSE);称为:

m_Slider.SetRangeMax(50);

在致电GetPos()之前,通过调用VerifyPos()

验证滑块是否在范围内

这是关于MFC滑块的好教程 - Windows Controls: Sliders (Track Bars)