Лабораторная работа №12 по VISUALC++ 2005
"Совместное использование флажков и переключателей при программировании на C++ стандарта ISO/ANSI "
Составил доц. Авраменко В.В.
1 Постановка задачи
Написать приложение для цветочного магазина с целью выбора типа композиции букета и цветов для него. Когда пользователь с помощью переключателя выбирает определенный тип букета, программа должна определить, какие цветы входят в букет, установить соответствующие флажки и вывести цену букета в текстовом поле.
Если пользователь выбирает другой тип букета, программа должна показать соответствующие данные уже для нового типа.
2 Общие указания
При создании приложения следует использовать групповые поля. Они предназначены для визуальной и функциональной группировки элементов. Все переключатели внутри группового поля работают совместно, что позволяет разместить в диалоговом окне несколько независимых групп переключателей. В приложении будут использованы два групповых поля.
.
2.1 Последовательность действий при создании программы
1)
Start Page.
Create:Project.
Выбрать тип проекта (Project Types) MFC, шаблон- MFC Application,
Name- flagswitches.
2) В окне Application Type выбрать Dialog based. Снять флажок Use Unicode Libraries. Щёлкнуть на Finish.
3) Выбрать вкладку Resource View (Просмотр ресурсов). Раскрыть папку Dialog . Дважды щелкнуть на IDD_FLAGSSWITCHES _DIALOG. Появится диалоговое окно.
4) Из Toolbox разместить в окне два групповых поля Group Box и текстовое окно ab| Edit Control. У левого группового поля заменить подпись static на «Букет». Для этого выделить это поле, вызвать контекстное меню, выбрать properties. В поле caption ввести новую подпись и нажать enter. Соответственно правое групповое поле подписать «Квіти».
5) Мы хотим, чтобы пользователь выбирал тип букета с помощью переключателя, а программа обозначала входящие в него цветы, устанавливая нужные флажки. Поэтому следует добавить в группу «Букет» четыре переключателя, а в группу «Квіти»- четыре флажка. Присвоить им соответствующие подписи, например, «Тип 1», «Тип 4», «Троянди», «Лілії» и т.п.Для этого, из Toolbox следует выбрать элемент Aa Static Text и разместить его справа от переключателя или флажка. В его properties в поле caption вместо static написать требуемую подпись. Выровнять по горизонтали и вертикали все управляющие элементы.
6) В класс CflagsswitchesDlg необходимо добавить элемент данных, соответствующий текстовому окну. Для этого нужно выделить текстовое окно, вызвать контекстное меню и выбрать в нем Add Variable. Доступ сделать private. Тип CEdit уже установлен по умолчанию. Имя дадим m_edit1. То есть элементом данных класса CflagsswitchesDlg является объект m_edit1 класса CEdit.
7) Для каждого переключателя создать метод-обработчик (от OnBnClickedRadio1() до OnBnClickedRadio4()).
8) В класс CflagsswitchesDlg необходимо добавить элементы данных, соответствующиефлажкам. Для этого нужно выделить флажок, вызвать контекстное меню и выбрать в нем Add Variable. Доступ сделать private. Тип CButton уже установлен по умолчанию. Имена дадим отm_check1 до m_check4. То есть элементами данных класса CflagsswitchesDlg являются объекты m_check1 – m_check4 класса CButton.
9) Заполнить заготовки обработчиков. При этом возникает необходимость принудительной установки каждого из флажков в заданное состояние. Для этого служит метод класса CButton SetCheck(параметр); . Если параметр равен true, это означает что флажок выбирается и метится «галочкой». Параметр false –сброс флажка. Для каждого типа букета определены входящие в него цветы. Соответствующие им флажки будут помечены. Если нужно узнать текущее состояние флажка, используется метод GetCheck().
void CflagsswitchesDlg::OnBnClickedRadio1()
{
m_check1.SetCheck(true);
m_check2.SetCheck(true);
m_check3.SetCheck(true);
m_check4.SetCheck(true);
m_edit1.SetWindowTextA("$6.86");
UpdateData(false);
// TODO: Add your control notification handler code here
}
void CflagsswitchesDlg::OnBnClickedRadio2()
{
m_check1.SetCheck(true);
m_check2.SetCheck(false);
m_check3.SetCheck(true);
m_check4.SetCheck(false);
m_edit1.SetWindowTextA("$3.95");
UpdateData(false);
// TODO: Add your control notification handler code here
}
void CflagsswitchesDlg::OnBnClickedRadio3()
{
m_check1.SetCheck(false);
m_check2.SetCheck(true);
m_check3.SetCheck(false);
m_check4.SetCheck(true);
m_edit1.SetWindowTextA("$2.75");
UpdateData(false);
// TODO: Add your control notification handler code here
}
void CflagsswitchesDlg::OnBnClickedRadio4()
{
m_check1.SetCheck(false);
m_check2.SetCheck(false);
m_check3.SetCheck(false);
m_check4.SetCheck(false);
m_edit1.SetWindowTextA("$0.00");
UpdateData(false);
// TODO: Add your control notification handler code here
}
Как видно из кода обработчиков, для букета типа №1 предусмотрено включить в букет все четыре названия цветов. А тип №4 – пустой букет. Поэтому все четыре флажка – сброшены.
Во всех обработчиках используется локальная переменная CString str, которая инициализируется стоимостью букета и затем выводится в текстовое окно.
UpdateData(false);// Метод занесения в текстовое окно.
// false означает, что происходит занесение в текстовое окно, а true- считывание из окна
8) Нажатием Ctrl+F5 запускаем программу.
3 Контрольные вопросы
Что такое групповое окно и зачем оно нужно?
2Как изменить подпись в групповом окне?
3 Как определить текущее состояние флажка и задать требуемое?
4Зачем нужно было вводить элементы данных m_check1, m_edit1 и др.?
5 Зачем нужен метод UpdateData() ?
Список литературы
1 С. Холзнер Visual C++ 6 «Питер», Санкт-Петербург, Москва, Харьков, Минск, 2001г.
2 Айвор Хортон VISUAL C++ 2005 Базовый курс, «Диалектика», Москва*Санкт-Петербург*Киев , 2007г.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.