我正在开发一个基于MFC的SDI VC++应用程序。在我的应用程序中,我需要为滑块控件指定负范围值。滑块的最小范围为 -40,最大范围为 255。我尝试使用设置范围函数。但它不起作用。如何在滑块中设置此范围?请帮忙..
我的滑块代码如下:滑块声明为
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();
这里的问题是调试期间返回的值都是正确的。但是当涉及到运行 UI 时,编辑框中的最小值是 429496 而不是 -40。为什么会这样..我正在使用CFormView类开发SDI应用程序。
提前谢谢。
您的最小值是"-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了解更多详情。
调用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 控件:滑块(跟踪栏)。