Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Добавление флажков в программу  




Добавить три флажка и текстовое поле в диалоговое окно несложно. Перетащите их из палитры (флажок — четвертая сверху кнопка в левом столбце) и растяните текстовое поле. Редактор диалоговых окон снабжает флажки надписями Check1, Check2 и Check3.

ПОДСКАЗКА: Чтобы изменить подпись рядом с флажком, щелкните на нем правой кнопкой мыши, выберите из появившегося контекстного меню команду Propertiesи введите в поле Captionновый текст.

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

Выравнивание элементов в редакторе диалоговых окон

Для того чтобы выровнять флажки, нажмите клавишу Ctrl и, не отпуская ее, щелкните на каждом из них — вокруг флажков появятся пунктирные рамки. Верхний флажок следует щелкнуть в последнюю очередь, чтобы его маркеры размеров были черными, а маркеры двух других флажков — пустыми. Тем самым вы назначаете верхний флажок "эталоном", по которому будут выравниваться остальные элементы.

Чтобы выровнять флажки по горизонтали, выполните команду Layout > Align. Открывается подменю — выберите в нем команду Left, чтобы выровнять флажки по левому краю эталонного флажка.

Горизонтальное выравнивание закончено, теперь неплохо бы сделать вертикальные интервалы между флажками одинаковыми. Для этого выполните команду Layout > Space Evenly, после которой также открывается новое подменю. Выберите из него команду Down.

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

Связывание флажков с кодом программы

ClassWizard поможет связать флажки с обработчиками сообщений. Откройте ClassWizard и найдите в нем идентификаторы трех флажков (IDC_CHECK1, IDC_CHECK2 и IDC_CHECK3). Создайте обработчики для них — для этого последовательно щелкните каждый идентификатор и дважды щелкните на сообщении ВN_СLICKEDв списке Messagesдля каждого из них.  

В результате будут созданы обработчики OnCheck1(), OnCheck2()иOnCheck3().При помощи ClassWizard создайте переменную m_text для содержимого текстового поля. 

Теперь откройте метод OnCheck1():  

void CChecksDIg::OnCheck1()  

{

// TODO: добавьте код для обработки оповещений от элемента       

}

Данный метод вызывается, когда пользователь щелкает на первом флажке, при этом состояние управляющего элемента автоматически изменяется: если флажок был установлен, то после щелчка он снимается, и наоборот. Вы можете в любой момент определить текущее состояние флажка. Для этого следует подключить к нему переменную и вызвать метод GetCheck(). Класс флажков, как и класс переключателей, является производным от CButton, поэтому для флажков можно использовать методы этого класса, перечисленные в табл. 7.1.

ПОДСКАЗКА: Кроме метода GetCheck(), который определяет состояние флажка, можно вызвать метод SetCheck(), чтобы принудительно установить или снять флажок.

Таблица 7.1. Методы класса CButton

Метод Назначение
fcButton Создает объект класса CButton
Create Создает кнопку как элемент Windows и связывает ее с объектом Cbutton
DrawItem Переопределяется для нестандартного рисования кнопки
GetBitmap Получает логический номер растрового изображения, заданный методом SetBitmap()
GetButtonStyle Получает стиль кнопки
GetCheck Определяет состояние кнопки
GetCursor Получает логический номер изображения указателя, заданный методом SetCursor()
Getlcon Получает логический номер значка, заданный методомSetlcon()
GetState Определяет параметры состояния кнопки: установку, выделение и наличие фокуса
SetBitmap Задает растровое изображение, отображаемое на кнопке
SetButtonStyle Изменяет стиль кнопки
SetCheck Задает состояние установки для кнопки
SetCursor Задает вид указателя мыши для данной кнопки
Setlcon Задает значок, отображаемый на кнопке
SetState Задает состояние выделения для кнопки

На самом деле разные виды кнопок отличаются друг от друга по стилю. Возможные стили кнопок перечислены в табл. 7.2. 

Таблица 7.2. Стили класса CButton 

Стиль кнопки Описание
BS_3TATE Аналогичен стилю флажка, но такая кнопка может находиться в третьем состоянии, то есть быть заблокированной
BS_AUT03STATE Аналогичен стилю флажка с тремя состояниями, но состояние автоматически изменяется при выделении элемента пользователем
BS_AUTOCHECKBOX Аналогичен стилю флажка, но состояние автоматически изменяется при выделении элемента пользователем
BS_AUTORADIOBUTTON Аналогичен стилю переключателя, но при выделении переключатель автоматически устанавливается, а все остальные переключатели той же группы снимаются
ВЫ_СНЕСКВОХ Создает флажок в виде маленькой квадратной кнопки, текст расположен справа
BS_DEFPUSHBUTTON Создает кнопку, окруженную жирной черной рамкой
BS_GROUPBOX Создает прямоугольную область, внутри которой могут группироваться другие кнопки
BS_LEFTTEXT Выводит текст слева от кнопки
BS_OWNERDRAW Создает кнопку с нестандартной прорисовкой
BS_PUSHBUTTON Стандартная «нажимаемая» кнопка, при нажатии посылающая окну-владельцу сообщение WMCOMMAND
BS_RADIOBUTTON Создает переключатель в виде маленькой круглой кнопки, текст расположен справа

Когда пользователь щелкает на флажке, мы заносим в текстовое поле строку, указанную на 1 флажке:

void CChecksDlg::OnCheck1()

{

m_text = "Щелчок на 1 флажке";

UpdateData(false);

}

Аналогичные строки будут выводиться и для флажков 2 и 3:

void CChecksDlg::OnCheck2()

{

m_text = "Щелчок на 2 флажке";

UpdateData(false);

}

void CChecksDlg::OnCheck3()

{

m_text = "Щелчок на 3 флажке";

UpdateData(false);

}

Это все, что требовалось сделать. Запустите программу. Как видите, приложение определяет, какой флажок был выбран, сообщает о щелчке пользователю. Мы научились пользоваться флажками!

В программе checksпользователь может одновременно установить все три флажка. Для некоторых приложений это не подходит — иногда требуется разрешить пользователю выбрать лишь один вариант из предложенного списка. Именно для этих ситуаций и были созданы переключатели.

Работа с переключателями

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

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

Этот пример отличается от предыдущего не только типом управляющих элементов, но и тем, что в любой момент времени установлен может быть лишь один переключатель. В программе checked каждый переключатель устанавливался независимо, но в примере radiosработа управляющих элементов координируется.

При помощи AppWizard создайте новую программу на базе диалогового окна, присвойте ей имя radios. Откройте диалоговое (оно же главное) окно с идентификатором IDD_RADIOS_DIALOG.

Разместите в нем текстовое поле и три переключателя (переключатель — четвертый сверху инструмент в правом столбце). Редактор диалоговых окон снабдит последние подписями Radiol, Radio2и Radio3, но вы можете изменить их по своему усмотрению.

Кроме того, выровняйте переключатели по вертикали и горизонтали, как это было сделано с флажками в предыдущем примере. Откройте ClassWizard, найдите в нем идентификаторы трех переключателей:IDC_RADIO1, IDС_RADIO2 иIDC_RADIO3, — создайте обработчик для всех переключателей —OnRadio1 (), OnRadio2() иOnRadio3(). Наконец, создайте переменную m_text и свяжите ее с содержимым текстового поля.










Последнее изменение этой страницы: 2018-04-12; просмотров: 491.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...