Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
11
Добавлен:
14.05.2015
Размер:
159.23 Кб
Скачать

Регулятор

Регулятор является объектом класса CSliderCtrl. Обработчик события перемещения движка регулятора, добавляемый через мастерClassWizard, имеет вид:

void CSdiDialog::OnCustomdrawSlider1(NMHDR* pNMHDR,LRESULT* pResult)

{

// TODO: Add your control notification handler code here

*pResult = 0;

}

Указатель pNMHDRимеет тот же смысл, что и для счетчика. Для управления регулятором необходимо ввести компоненту данных, связанную с регулятором, например,m_slider. Эта компонента должна быть категорииControl. Тогда, чтобы проконтролировать текущую позицию движка регулятора, можно добавить в обработчик команды:

UpdateData(TRUE);

m_edit = m_slider.GetPos();

UpdateData(FALSE);

Здесь m_edit– компонента типаint, связанная с текстовым полем.

Существует другой способ обработки перемещения движка. Можно в ClassWizardвыбрать сообщениеWM_HSCROLL, связанное с классом родительского окнаCSdiDialog. В этом случае обработчик может иметь вид:

void CSdiDialog::OnHScroll(UINT nSBCode,

UINT nPos,

CScrollBar* pScrollBar) {

UpdateData(TRUE);

m_edit = m_slider.GetPos();

UpdateData(FALSE);

CDialog::OnHScroll(nSBCode, nPos, pScrollBar);

}

Недостаток второго способа обработки события перемещения движка регулятора в том, что при нескольких регуляторах в диалоговом окне он может быть применен только к одному из них.

Так же, как и для счетчика, для регулятора можно задать значения нижней и верхней границ диапазона перемещения движка:

BOOL CSdiDialog::OnInitDialog() {

CDialog::OnInitDialog();

m_slider.SetRange(0,200,TRUE);

return TRUE;

}

Аналогично могут быть заданы и многие другие параметры регулятора.

Линейный индикатор

Линейный индикатор является объектом класса CProgressCtrl. В большинстве случаев этот объект необходим для показа протекания некоторого процесса, например, времени работы программы. Поэтому индикатор управляется не пользователем, а связанным с ним процессом.

Для работы с линейным индикатором необходимо ввести компоненту данных категории Control, как и для других элементов управления, например,m_progress. Наиболее важными параметрами индикатора, которые следует задать при открытии диалогового окна, являются:

  • нижняя и верхняя границы индикатора, задаваемые функцией SetRange();

  • шаг индикатора, на величину которого изменяется его текущее значение при обработке очередного сообщения от процесса – функция SetStep();

  • начальное положение индикатора – функция SetPos().

Пример:

BOOL CSdiDialog::OnInitDialog() {

CDialog::OnInitDialog();

m_progress.SetRange(1,200);

m_progress.SetStep(10);

m_progress.SetPos(100);

return TRUE;

}

Для изменения текущего значения индикатора используется функция StepIt(), которую следует выполнять при каждой очередной обработке сообщения от процесса.

Очень часто для управления индикатором используется сообщение от таймера. Предположим, что таймер должен запускаться по нажатию кнопки IDC_BUTTON1. Тогда обработчик сообщения от кнопки должен задать параметры таймера и запустить его:

void CSdiDialog::OnButton1() {

SetTimer(1,500,NULL);

}

Здесь установлен интервал в 0.5 секунды, через который таймер будет посылать сообщения WM_TIMERродительскому окну. Для обработки этого сообщения следует черезClassWizardсоздать компоненту-функцию:

void CSdiDialog::OnTimer(UINT nIDEvent) {

m_progress.StepIt();

CDialog::OnTimer(nIDEvent);

}

Таким образом, при нажатии кнопки IDC_BUTTON1, будет запущен таймер, а соответственно - линейный индикатор. При достижении индикатором верхней границы, таймер будет продолжать посылать сообщения, а индикатор начнет работу с нижней границы. Для остановки таймера можно усовершенствовать обработчикOnTimer:

void CSdiDialog::OnTimer(UINT nIDEvent) {

int imin, imax;

m_progress.GetRange(imin,imax); // Определили границы индикатора

if (m_progress.GetPos()<imax) m_progress.StepIt();

else KillTimer(1); //Граница достигнута – остановить таймер

CDialog::OnTimer(nIDEvent);

}

Соседние файлы в папке ВУМИП_ЗО