Как указать отрицательный диапазон для управления ползунком?

Я занимаюсь разработкой приложения 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).

Другие вопросы по тегам