Как указать отрицательный диапазон для управления ползунком?
Я занимаюсь разработкой приложения SDI VC++ на основе MFC. В моем приложении мне нужно указать отрицательное значение диапазона для моего Slider Control. Минимальный диапазон для ползунка -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();
Здесь проблема в том, что значение, возвращаемое во время отладки, является правильным. Но когда дело доходит до пользовательского интерфейса при запуске, минимальное значение равно 429496, а не -40 в поле редактирования. Почему это так... Я разрабатываю приложение SDI с использованием класса CFormView.
Заранее спасибо.
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 для получения дополнительной информации.
Вызов 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: Sliders (Track Bars).