Опубликован: 10.03.2009 | Доступ: свободный | Студентов: 2297 / 279 | Оценка: 4.31 / 4.07 | Длительность: 09:23:00
Лекция 4:

Практика работы в среде визуального программирования

< Лекция 3 || Лекция 4: 12345 || Лекция 5 >

Списки. Комбинированные поля и бегунки

Список - управляющий элемент, представляющий пользователю перечень из нескольких строк. (Выделить -1 клик, выбрать - 2 клика.) Комбинированное поле - сочетание текстового поля, раскрывающегося списка и кнопки, с помощью которой пользователь открывает список. Бегунок - управляющий элемент. Чаще всего применяется для ввода числовых величин - например, интенсивности цвета.

Списки

Создадим список и выведем выбранную строку в текстовое поле. Создадим программу Lists на основе диалогового окна, добавим список, текстовое поле и 2 надписи ("Дважды щелкните по строке" и "Вы выбрали"). Управляющие элементы можно отображать и в обычном окне (недиалоговым). В этом случае нельзя воспользоваться редактором WISIWYG.

Создание объекта для работы со списком

  1. Вызовем контестное меню списка в редакторе диалогового окна и выберем пункт Add
  2. Variable.
  3. В поле Category: выберем значение Control.
  4. Variable name: m_list.
  5. Finish.

Инициализация данных в списке

Для инициализации данных используем метод OnInitDialog() и метод AddString(…) объекта m_list. Внесем список группы.

BOOL CListsDlg::OnInitDialog()
{
  CDialog::OnInitDialog();
  m_list.AddString("Васильев Н.И.");
  …
  m_list.AddString("Яковлева Е.А.");
  …
}

Замечание: Если сортировка не нужна, то сделать клик правой кнопкой мыши в редакторе диалоговых окон и вызвать свойства списка Properties->Sort = false.

Обработка двойных кликов в списках

При двойном клике заносится текст выбранной строки в текстовое поле. Создадим переменную m_text типа CString, связанную с текстовым полем, и обработчик OnDblclkList1(). Для определения выбранной строки будем использовать метод GetCurSel(). Это метод класса CListBox. Он возвращает индекс строки, которую пользователь дважды кликнул левой кнопкой мыши. Содержимиое строки получим при помощи метода GetText(…) класса CListBox.

void CListsDlg::OnDblclkList1()
{
  m_list.GetText(m_list.GetCurSel(),m_text);
  UpdateData(false);
}

Комбинированные поля

Создадим программу Combos на основе диалогового окна. Создадим комбинированное поле и текстовое поле. Добавим переменные m_combo типа CComboBox, связанную с элементом управления комбинированное поле, и m_text типа CString, связанную с текстовым полем. Комбинированные поля инициализируются в методе OnInitDialog():

BOOL CCombosDlg::OnInitDialogs()
{
  CDialog::OnInitDialog();
  m_combo.AddString("Васильев Н.И.");
  …
  m_combo.AddString("Яковлева Е.А.");
  m_combo.SetCurSel(0);  //Выбор первой строки списка
  …
}

Программа должна сообщать, какую строку списка выбрал пользователь. Комбинированное поле генерирует событие CBN_SELCHANGE. Добавим обработчик этого события в класс диалогового окна.

Properties (Класс диалогового окна)->Events->IDC_COMBO1->CBN_SELCHANGE->OnSelchangeCombo1()

Обработчик OnSelchangeCombo1:

void CComboDlg::OnSelchangeCombo1()
{
  m_combo.GetLBText(m_combo.GetCurSel(),m_text);
  UpdateData(false);
}

Прокрутка и использование бегунков

Создадим программу Slider на базе диалогового окна. Добавим текстовое поле, две надписи ("координата бегунка" и "движение") и бегунок (ему присвотся идентификатор IDC_SLIDER1 ) и, связанную с ним, переменную m_slider типа CSliderCtrl. При инициализации бегунка необходимо задать его интервал. Эта величина определяет возможные позиции бегунка от крайнего левого до крайнего правого положения. В примере бегунок принимает значения от 1 до 100. Эти значения задаются методами SetRangeMin(…) и SetRangeMax(…) класса CSliderCtrl. Второй параметр этих методов показывает, нужно ли перерисовывать ползунок после изменения интервала. Передавая значение false, мы отказываемся от перерисовки.

BOOL  CSliderDlg::OnInitDialog()
{
  CDialog::OnInitDialog();
  m_slider.SetRangeMin(1, false);
  m_slider.SetRangeMax(100, false);
  m_text="1";    //Связываем переменную с содержимым текстового поля и присваем значение 1
  UpdateData(false);
  …
}

Обработка сообщений бегунка

При перемещении бегунка элемент посылает сообщение WM_HSCROLL. Добавим его обработчик. Нам необходимо перехватывать сообщения с кодом SB_THUMBPOSITION, посылаемые при перемещение бегунка. Выведем в текстовом поле его новую позицию. Создадим переменную m_text, связанную с содержимым текстового поля, и присвоим ей значение параметра nPos обработчика OnHScroll(). Объект m_text относится к классу CString, а параметр nPos имеет целый тип. Для представления целого числа в виде текстовой строки воспользуется методом Format() класса CString.

void CSliderDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{  
  if(nSBCode == SB_THUMBPOSITION) 
  {
    m_text.Format("%ld",nPos);
    UpdateData(false); 
  }
  else CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
< Лекция 3 || Лекция 4: 12345 || Лекция 5 >