2013-10-07 6 views
1

Я разрабатываю приложение на базе MFC на основе SDI VC++. В моем приложении мне нужно указать отрицательное значение диапазона для моего элемента управления слайдером. Минимальный диапазон для ползунка: -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();    

Здесь проблема заключается в том, что val ue, возвращаемое во время отладки, все правильно. Но когда дело доходит до UI при запуске минимальное значение - 429496, а не -40 в поле редактирования. Почему именно так. Я разрабатываю SDI-приложение с использованием класса CFormView.

Заранее спасибо.

ответ

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).

+0

Диапазон принимает значения <0, если только вы не привязали его к чему-то еще. Возможно, размещение соответствующей части кода может помочь нам разобраться с проблемой. –

+0

Эти части кода были бы лучше с вопросом. Также с объявлением слайдера. –

+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 для получения более подробной информации.

 Смежные вопросы

  • Нет связанных вопросов^_^