{
// 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г.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.