1

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

我的 Slider 代码如下: 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();            

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

提前致谢。

4

2 回答 2

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 了解更多详细信息。

于 2013-10-09T02:31:06.223 回答
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 Sliders - Windows Controls: Sliders (Track Bars)的好教程。

于 2013-10-07T06:38:51.537 回答