Работа с ползунками при программировании на C++ стандарта ISO/ANSI (Лабораторная работа № 15 по VisualC++ 2005), страница 2

{

    // TODO: Add your message handler code here and/or call default

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

}

 Здесь nSBCode- код операции прокрутки. Все возможные режимы прокрутки показаны в [1 ] с.319. Остальными параметрами функции OnHScroll() являются новая позиция бегунка и указатель на управляющий элемент, от которого поступило сообщение. В нашем случае необходимо прехватывать и обрабатывать сообщения с кодом SB_THUMBPOSITION, посылаемые при перемещении бегунка. Текст обработчика приводится ниже.

void Cslider1Dlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)

{

        char s[5];

             if(nSBCode==SB_THUMBPOSITION)

    {

        gcvt(nPos,3,s);

        m_edit1.SetWindowTextA(s);

        UpdateData(false);

    }

    else

    // TODO: Add your message handler code here and/or call default

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

}

    Здесь используется функция gcvt() для преобразования значения nPos в строку символов char s[5]. Длина строки символов зависит от максимального значения преобразуемого числа с учетом символа под признак окончания строки. Затем метод SetWindowTextA() класса CEdit выводит содержимое строки s в текстовое окно. При этом нужно помнить, что параметр false функции UpdateData()означает занесение строки в окно.

    Программа составлена и её можно запустить, нажав Ctrl+F5.

    Примечание. Занесение позиции ползунка в текстовое окно можно было сделать по-другому:

1) Не создавать элемент данных CEdit m_edit1. Вместо этого в класс Cslider1Dlg добавить с доступом private элемент данных CString m_text1.

2) Мастер ClassWizard использует специальные процедуры, позволяющие привязать созданные им элементы данных к полям диалоговых окон. Эти процедуры носят названия «обмен данными диалогового окна» и «проверка данных диалогового окна» (DDX/DDV, Dialog Data Exchange and Dialog Data Validation) [2]с.161.Когда пользователь редактирует поля диалоговых окон, процедуры DDV проверяют введенные значения и блокируют ввод запрещенных значений. Затем процедуры DDX автоматически копируют содержимое полей диалоговых окон в привязанные к ним элементы данных класса. И наоборот, когда приложение изменяет элементы данных класса, привязанные к полям диалогового окна, процедуры DDX могут сразу отобразить новые значения полей на экране компьютера.

Эти процедуры вызываются из метода DoDataExchange. В него необходимо добавить вызов функции  DDX_Text(), чтобы связать созданный  по нашему желанию элемент данных m_text1  с автоматически созданным идентификатором текстового окна IDC_EDIT1.

 Фрагмент метода DoDataExchange приведен ниже.

void Cslider1Dlg::DoDataExchange(CDataExchange* pDX)

{

    CDialog::DoDataExchange(pDX);

    DDX_Control(pDX, IDC_SLIDER1, m_slider1);

    DDX_Text(pDX,IDC_EDIT1,m_text1);// Добавлено. Без //этого не будет вывода в текстовое окно.

}

3) Элемент данных m_text1 используется для занесения позиции бегунка. Теперь обработчик OnHScroll имеет вид:

void Cslider1Dlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)

{

    if(nSBCode==SB_THUMBPOSITION)

    {

        m_text1.Format("%ld",nPos);

        UpdateData(false);

    // TODO: Add youfalser message handler code here and/or call default;

    }

    else

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

}

          Это все, что нужно было сделать. Программа готовая.

3 Контрольные вопросы

1Зачем  в программах используется ползунки?

2 Как задать ориентацию ползунка ?

3 Как осуществить инициализацию ползунка?

4 Как можно отобразить позицию бегунка в текстовом поле?

Список литературы

1 С. Холзнер VISUAL C++ 6. Учебный курс, «Питер», Санкт-Петербург, Москва, Харьков, Минск, 2001г.

2 Сергеев А.П., Терен А.Н. Программирование в VISUAL C++ 2005 «Диалектика», Москва*Санкт-Петербург*Киев , 2006г.