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

Стандартные элементы управления

Элементы управления являются окнами, имеющими набор свойств и методов управления. Стандартные элементы управления содержатся на панели элементов, которая доступна в том случае, если активизировано диалоговое окно. Таким образом, в диалоговое окно элементы управления могут быть установлены как визуально, так и через запись кода программы. В обычное (SDI) окно элементы управления устанавливаются только программно. На рис. 1 показаны основные элементы управления, установленные в диалоговое окно.

Ниже в таблице 1 приведены имена элементов управления в соответствии с их нумерацией на рис. 1 и их назначение.

Таблица 1

Имя

на рис. 1

Назначение

Button

1, 3, 4

Кнопка – командный элемент

Static Text

2

Надпись – для записи пояснительных надписей

Edit Box

5, 16

Текстовое поле – для ввода/вывода и редактирования текстов и числовых данных

Combo Box

6

Комбинированный блок списка и текстового поля

List Box

7

Список – для выбора элемента списка

Radio Button

8, 9, 10

Переключатель – для выбора одного из режимов

GroupBox

11

Рамка – для группировки других элементов

Check Box

12, 13

Флажок – для установки режима "включено/выключено"

Horizontal Scroll Bar

14

Горизонтальная полоса прокрутки

Vertical Scroll Bar

15

Вертикальная полоса прокрутки

Spin

17

Счетчик – для изменения целых значений

Slider

18

Регулятор – для управления при помощи движка

Progress

19

Линейный индикатор – для показа степени завершенности некоторого процесса

Для создания элементов управления в библиотеке MFCимеются соответствующие классы.

Если элемент не является статическим (например, Static Text), то для того, чтобы он выполнял в приложении полезные действия, необходимы функции – обработчики событий, связанных с изменением его состояния. Для многих из них это щелчок мышью, перемещение движка, ввод символа и т.д. Самый простой способ создания обработчиков событий – через мастерClassWizard. Обычно имя обработчика начинается с префиксаOn. При выполнении указанных выше действий элемент управления посылаетсообщениеродительскому окну илиWindows. Если в приложении имеется обработчик сообщения (события), то он перехватывает его и начинает свою работу. В противном случае никаких полезных действий элемент управления выполнять не будет.

В таблице 2 приведены некоторые, часто встречающиеся сообщения, знание которых необходимо при создании обработчиков событий.

Таблица 2

Элемент управления

Сообщение

Смысл сообщения

Button, Radio Button, Check Box

BN_CLICKED

Однократный щелчок мышью

BN_DBLCLICKED

Двойной щелчок мышью

Edit Box

EN_CHANGE

Изменение содержимого поля

Combo Box

CBN_SELCHANGE

Выделение другой записи

CBN_DBLCLK

Двойной щелчок мышью

List Box

LBN_SELCHANGE

Выделение другой записи

LBN_ DBLCLK

Двойной щелчок мышью

Spin

UDN_DELTAPOS

Изменение значения счетчика

Slider

NM_CUSTOMDRAW

Протяжка мышью

При визуальной установке элемента управления ему автоматически присваивается идентификатор, который начинается с некоторого префикса, например IDC_, а заканчивается порядковым номером элемента среди элементов этого типа. Например, для кнопки идентификатором может бытьIDC_BUTTON1. Идентификатор является основным инструментом, с помощью которого указывается, какому элементу управления задаются те или иные свойства.

Идентификатор можно изменить на любой другой (желательно с префиксомIDC_) через окно свойств элемента управления, которое вызывается из контекстного меню. Пример окна свойств для кнопки показан на рис. 2.

В поле Captionможно отредактировать надпись, содержащуюся на кнопке.

Если щелкнуть по значку вопроса в окне свойств, то можно получить справку по всем элементам управления, расположенным на открытой вкладке.

Для добавления функции – обработчика сообщения от элемента управления откроем вкладку Messages окна мастераClassWizard. В полеClass name следует выбрать класс, которому будет передаваться сообщение. В полеObject IDsвыберем идентификатор объекта, генерирующего сообщение, а в полеMessages– требуемое сообщение. После этих действий становится доступной кнопкаAdd Function,после нажатия на которую можно уточнить имя функции и нажать кнопкуEdit Code. После этого функция обработки сообщения будет добавлена в выбранный класс и в окне редактора откроется заготовка кода функции. Место, в которое следует дописать код обработки сообщения, обычно обозначено комментарием

// TODO: Add your control notification handler code here

Этот комментарий можно удалить.

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

Кнопка

Кнопка обычно используется для выполнения программой некоторых действий, например, для решения математической задачи и вывода результатов. Обработчики сообщений от кнопки не имеют аргументов. Если требуется поместить в обработчик некоторый алгоритм, то рекомендуется оформить его в виде отдельной функции, а в обработчике сделать обращение к ней.

Команды для вывода результатов решения задачи зависят от того элемента управления, который используется для вывода. Это может быть надпись, текстовое поле или список. Например, если вывод значения целой переменной kвыполняется в текстовое поле, для которого организована компонента данныхm_editцелого типа, то используются команды:

UpdateData(TRUE);

m_edit=k;

UpdateData(FALSE);

Текстовое поле

Текстовое поле является объектом класса CEditи характерно тем, что с его помощью можно выполнять ввод и вывод данных. Обычно для текстового поля вводится переменная – компонента данных родительского окна, через которую можно получить доступ к методам классаCEdit. Компоненту данных можно ввести черезClassWizard(вкладкаMember Variable):

  • в основном окне выберите имя класса (Class name), идентификатор текстового поля (Control IDs) и нажмите кнопкуAdd Variable...;

  • в окне Add Member Variable в поле Member variable name запишите имя переменной. Обычно такие имена начинаются с префиксаm_, например,m_edit;

  • в поле Categoryвыберите категорию переменной:ValueилиControl. В первом случае в текстовом поле можно будет работать с величиной того типа, который будет выбран в полеVariable Type(см. пример выше). Во втором случае в текстовое поле можно вводить и выводить только текстовые величины, но программист получает доступ ко всем функциям классаCEdit,например, для вывода текста "Hello!" надо записать:

m_edit.SetWindowText("Hello!");

Прочесть содержимое текстового поля во втором случае можно с помощью функции GetWindowText, например:

LPTSTR str;

m_edit.GetWindowText(str);

где LPTSTR– описатель типа указатель на строку,astrбудет содержать адрес строки, в которую помещено содержимое текстового поля.

Список

Список является объектом класса CListBox. Обычно список содержит некоторое количество записей, любую из которых можно выделить щелчком мыши. Списки чаще всего используются для выбора одной из нескольких записей. Для программирования списка следует создать компоненту данных, например,m_listbox, категорииControl,как для текстового поля. Таким образом можно получить доступ к функциям классаCListBox, с помощью которых можно управлять списком:

  • добавление записи в список:

m_listbox.AddString("Очередная запись");

  • установка выделения i-ой записи списка (нумерация начинается с нуля):

m_listbox.SetCurSel(i);

  • определение номера Nвыделенной записи:

N = m_listbox.GetCurSel();

  • чтение записи из списка:

CString str;

m_listbox.GetText(i, str);

где i– номер записи;str– прочтенная строка.

Комбинированный блок

Комбинированный блок из списка и текстового поля является объектом класса CComboBoxи обладает свойствами списка и текстового поля. Для работы с комбинированным блоком надо ввести связанную с ним переменную – компоненту данных, как для простого списка и через нее получить доступ к функциям классаCComboBox. В комбинированный блок можно добавлять записи во время выполнения программы.

Замечание. Если при визуальной установке комбинированного блока его высота не превышает высоты содержащейся в нем кнопки со стрелкой, то при работе список не будет раскрываться. Для увеличения высоты комбинированного блока надо щелкнуть левой кнопкой мыши по кнопке со стрелкой, после чего его можно "растянуть" за нижний маркер.

Переключатель

Переключатель является объектом класса CButton. Обычно несколько переключателей объединяют в группу, где активным является только один из них. Если в диалоговом окне требуется организовать более одной группы переключателей, для этой цели используют элемент управленияGroup Box.

Для организации группы переключателей необходимо для первого переключателя в окне свойств установить флажок Group. Только после этого идентификатор переключателя появится на вкладкеMember VariablesмастераClassWizard. Для программирования переключателя следует ввести связанную с ним переменную – компоненту данных, например,m_radio. Если эта переменная категорииValue(типint), то программно активизироватьi-ый переключатель (нумерация начинается с нуля) можно командами:

UpdateData(TRUE);

m_radio = i;

UpdateData(FALSE);

Флажок

Флажок является объектом класса CButtonи предназначен для задания свойств типа "включено/выключено". В отличие от переключателей флажки не объединяются в группы. Если в родительском окне имеется несколько флажков, каждый их них обычно не зависит от других и может быть установлен в любое из двух состояний.

Рассмотрим способы установки и снятия флажка.

Первый способ заключается в описании через ClassWizardкомпоненты данных категорииValue(типBOOL), например,m_check1:

UpdateData(TRUE);

m_check1 = true;

UpdateData(FALSE);

Для снятия флажка команду m_check1 =trueнадо заменить наm_check1 =false.

Во втором способе введем переменную m_check2 категорииControl. Тогда для установки флажка необходима команда

m_check2.SetCheck(1);

Для установки флажка аргументом функции SetCheckможет быть любое ненулевое значение, а для снятия – только нуль.

Замечание. Флажок устанавливается и снимается при щелчке по нему левой кнопкой мыши автоматически. Поэтому, обычно нет необходимости программировать его установку и снятие, как показано выше. Например, для вывода информации об изменении состояния флажка при щелчке по нему, достаточно в обработчике щелчка определить его состояние, например:

if (m_check) m_edit1="Флажок установлен";

else m_edit1="Флажок снят";

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