- •«Программирование в интегрированных средах»
- •Лабораторная работа №1 Структура программы, текстовый ввод-вывод
- •Лабораторная работа №2 основные операторы языка с
- •Лабораторная работа №3 обработка массивов информации
- •Лабораторная работа №4 функции
- •Лабораторная работа №5 структуры
- •Лабораторная работа №6 файлы
- •Лабораторная работа №7 указатели и списки
- •Лабораторная работа №8 создание приложений, основанных на диалоговом окне
- •Приложение а требования к оформлению отчета
- •Приложение б - Оформление программного кода
- •Основные типы данных.
- •Основные операции. Арифметические операции.
- •Операции отношения.
- •Логические операции.
- •Побитовые операции.
- •Адресные операции.
- •Другие операции.
- •Основные операторы.
- •Приложение г – технология визуального проектирования
Лабораторная работа №8 создание приложений, основанных на диалоговом окне
Цель работы: приобретение навыков создания приложений для Windows, знакомство с основами визуального проектирования.
Задание к лабораторной работе
Ознакомиться с основными принципами визуального проектирования, элементами управления, их свойствами и событиями;
Выполнить последовательно все пункты, указанные в разделе «Ход работы»;
Оформить отчет.
Ход работы
Создать проект программы
Создать программу TEST.EXE, которая должна работать следующим образом:
При вводе в строке редактирования слов "Paint" и "Calculator", запускаются соответственно "Windows Paint" и "Windows Calc".
При снятии флажка Visible, строка редактирования исчезает, а при снятии флажка Enabled, закрывается доступ к окну редактирования.
При отмечании флажков, все происходит наоборот.
2. Выполнить визуальное проектирование диалоговой панели
При запуске программы, главное окно должно выглядеть так:
Задайте свойства элементов управления в соответствии с таблицей.
Объект |
Свойство |
Установка |
Dialog Box |
ID |
IDD_TEST_DIALOG |
|
Caption |
The Test Program |
|
Font |
System, Size 10, страница Styles |
|
панель Minimize |
отмечена, страница Styles |
|
панель Maximize |
отмечена, страница Styles |
Edit Box |
ID |
IDC_TEST_EDIT |
Group Box |
ID |
IDC_STATIC |
|
Caption |
Test |
Static Text |
ID |
IDC_STATIC |
|
Caption |
INSTRUCTIONS: To execute the Paint program: type Paint in the edit box. To execute the Calculator program, type Calculator in the edit box. To terminate the program, type Exit in the edit box. |
Check Box |
ID |
IDC_VISIBLE_CHECK |
|
Caption |
&Visible |
Check Box |
ID |
IDC_ENABLED_CHECK |
|
Caption |
&Enabled |
Push Button |
ID |
IDC_TEST_BUTTON |
|
Caption |
&Test |
Push Button |
ID |
IDC_CLEAR_BUTTON |
|
Caption |
&Test |
Push Button |
ID |
IDC_EXIT_BUTTON |
|
Caption |
E&xit |
|
Client edge |
отмечен, страница Extended Styles |
|
Static edge |
отмечен, страница Extended Styles |
|
Modal frame |
отмечен, страница Extended Styles |
В объекте Dialog Box вы задаете следующие данные: Caption - название диалогового окна. Font - здесь вы уcтановили шрифт -System и его размер 10 Панель Minimize и Maximaze отмечены для того, чтобы вы могли свертывать окно и наоборот рассматривать его во весь экран. Для их установки вам необходимо зайти в Dialog Box Propertions и на странице Styles отметить их.
Edit Box - это окно редактирования, в нем вы можете вводить свой текст. Мы не задавали этому элементу никаких дополнительных параметров, нам необходимо только знать его итендификатор(IDC_TEST_EDIT).
В следующем пункте Group Box, который служит для выделения эелементов управления в рамку. Вы указали для этого элемента название(Captions) Test и итендификатор IDC_STATIC.
Static Text - это элемент текста, он вставляется как обычный элемент управления, но не выполняет ни каких функций, так как служит для показа текста, который вы зададите в Captions. В данном случае мы вставляем инструкцию по применению программы: INSTRUCTIONS: To execute ....Вы, наверное, заметили, что этот элемент имеет такой же итендификатор, как и у Group Box, так как мы не будем их использовать в программе и связывать с ними события( хотя это и невозможно).
Следующие два элемента Check Box с Captions &Visible и &Enable, будут служить для скрытия окна редактирования и закрытия доступа к окну редактироавния, и наоборот. Если они включены, то окно видимо и есть к нему доступ, и наоборот. При запуске программы они должны будут быть отмечены. Для этого в дальнейшем мы напишем специальный код.
Затем идут три кнопки Test, Clear и Exit. При нажатии на кнопку Test в окне редактирования появляется текст: This is a Test, а при нажатии на кнопку Clear, окно редактирования очищается. Кнопка E&xit, служащая для завершения программы, имеет еще дополнительные параметры, которые можно включить на странице Extended Styles. Они служат для разнообразного обрамления, выделения.
3. Связать переменные с окном редактирования и флажками
Более подробная информация приведена в Приложении Г.
4. Связать элементы управления с событиями
Событие – инициализация диалогового окна.
Напишите следующий код в функции OnInitDialog():
BOOL CTestDlg::OnInitDialog() { CDialog::OnInitDialog(); ... ... ... // TODO: Add extra initialization here // Добавьте свою инициализацию
////////Мой код начинается здесь///////////
//Устаноить переменную флажка VisibleCheck и EnabledCheck в состояние //TRUE m_VisibleCheck=TRUE; m_EnableCheck=TRUE; //Обновить экран UpdateData(FALSE);
////////Мой код заканчивается здесь///////////
return TRUE; // Вернуть TRUE, если только вы не установили фокус на элемент управления }
Рассмотрим код:
Первый и второй операторы, который которые вы ввели присваивают переменным m_VisibleCheck и m_EnableCheck значение TRUE. Это означает, что при запуске программы флажки будут отмечены.
Последний оператор UpdateData(FALSE) обновляет экран, т.е. он обновляет значения переменных элементов управления на текущие. В нашем случае, при выполнении этого оператора текущие содержимое переменных связанных с флажками будет передано к ним.
Теперь для того, чтобы посмотреть инициализирующий код в действии выполните программу.
Событие – нажатие на кнопку.
Связывание кода с событием BN_CLICKED кнопки Exit При нажатии на кнопку Exit программа Test.Exe завершится. Добавьте в функцию обработки события для этой кнопки следующий код:
void CTestDlg::OnExitButton() { // TODO: Add your control notification handler code here
////////Мой код начинается здесь///////////
OnOK();
////////Мой код заканчивается здесь///////////
}
Функция OnOK(), которую вы ввели завершает программу, при нажатии на кнопку Exit.
Связывание кода с событием BN_CLICKED кнопки Test При нажатии на кнопку Test программа Test.Exe в окне редактирования напишет текст: This is a Test
Чтобы связать код с событием BN_CLICKED кнопки Test, напишите следующий код в функции OnTestButton():
void CTestDlg::OnTestButton() { // TODO: Add your control notification handler code here
////////Мой код начинается здесь///////////
///Присвоить переменной окна редактирования IDC_TEST_EDIT значение This is a Test. m_TestEdit="This is a Test"; //// Обновить экран UpdateData(FALSE);
////////Мой код заканчивается здесь///////////
}
Код, который вы ввели содержит два оператора:
Первый присваивает переменной m_TestEdit типа CString значение This is a Test.
А второй оператор UpdateData(FALSE); обновляет экран, т.е. сообщает переменным диалогового окна текущие их значения.
Связывание кода с событием BN_CLICKED кнопки Clear При нажатии на кнопку Clear программа Test.Exe должна стирать текст из окна редактирования.
Чтобы связать код с событием BN_CLICKED кнопки Clear, напишите следующий код в функции OnClearButton():
void CTestDlg::OnClearButton() { // TODO: Add your control notification handler code here
////////Мой код начинается здесь///////////
///Присвоить переменной окна редактирования IDC_TEST_EDIT значение NULL. m_TestEdit=" "; //// Обновить экран UpdateData(FALSE);
////////Мой код заканчивается здесь///////////
}
Код, который вы ввели содержит два оператора:
Первый присваивает переменной m_TestEdit типа CString значение NULL, т.е. окно редактирования не будет содержать никакого текста.
А второй оператор UpdateData(FALSE); обновляет экран, т.е. сообщает переменным диалогового окна текущие их значения. При выполнении этого оператора весь текст из окна редактирования удалится.
Теперь сохраните свою работу, выбрав Save All в меню File. Чтобы увидеть в действии код программы выполните и запустите ее. Напишите что-нибудь в окне редактирования. Щелкните на кнопку Clear, вы видите что текст стирается. Теперь нажмите на кнопку Test в окне редактирования появится текст This is a Test.
Если все это выполняется, значит, вы совершенно правильно связали события с кнопками Test и Clear.
Событие – установка флажка.
Связывание кода с событием BN_CLICKED флажка Visible. При включении флажка Visible программа Test.Exe должна сделать окно редактирования невидимым, а при выключении - наоборот. Чтобы связать код с событием BN_CLICKED флажка Visible,: напишите следующий код в функции OnEnableButton():
void CTestDlg::OnVsibleCheck() { // TODO: Add your control notification handler code here
////////Мой код начинается здесь///////////
////Обновить значения переменных элементов управления, ////(содержимое эрана передается переменным элементов управления) UpdateData(TRUE); ///Если отметка флажка Visible зделать окно редактирования видимым ///А если нет - то невидимым if(m_VisibleCheck==TRUE) GetDlgItem(IDC_TEST_EDIT)->ShowWindow(SW_SHOW); else GetDlgItem(IDC_TEST_EDIT)->ShowWindow(SW_HIDE);
////////Мой код заканчивается здесь///////////
}
Код который вы ввели содержит следующие операторы:
UpdateData(TRUE); - этот оператор обновляет значения переменных элементов управления текущими значениями, которые содержаться на экране. Т.е. при нажатии на флажок переменная может принимать два значения TRUE или FALSE, TRUE - это когда флажок включен, а FASLE - наоборот. Значит при выполнении этого оператора переменная флажка управления принимаеит текущее положение флажка и все остальные переменные обновляются значениями, которые отображаются на экране.
Следующие оператор проверяет включен или выключен флажок. Если он включен, то выполняется оператор GetDlgItem(IDC_TEST_EDIT)->ShowWindow(SW_SHOW);, где GetDlgItem(IDC_TEST_EDIT) извлекает указатель на элемент управления, а функция ShowWindow(SW_SHOW); с параметром SW_SHOW, делает окно редактирования видимым.
А если флажок не отмечен, то выполняется таже самая функция ShowWindow(); с параметром SW_HIDE, этот параметр означает спрятать окно редактирования.
Связывание кода с событием BN_CLICKED флажка. Enable При включении флажка Enable программа Test.Exe должна сделать окно редактирования доступным, а при выключении - недоступным. Чтобы связать код с событием BN_CLICKED флажка Enable,: напишите следующий код в функции OnEnableButton():
void CTestDlg::OnEnableCheck() { // TODO: Add your control notification handler code here
////////Мой код начинается здесь///////////
////Обновить значения переменных элементов управления, ////(содержимое эрана передается переменным элементов управления) UpdateData(TRUE); ///Если отметка флажка Enable зделать окно редактирования видимым ///А если нет - то невидимым if(m_EnableCheck==TRUE) GetDlgItem(IDC_TEST_EDIT)->EnableWindow(SW_SHOW); else GetDlgItem(IDC_TEST_EDIT)->EnableWindow(SW_HIDE);
////////Мой код заканчивается здесь///////////
}
Код который вы ввели содержит следующие операторы:
UpdateData(TRUE) - обновляет переменные элементов управления текущими их значениями на экране. После выполнения этого оператора перменной m_EnableCheck присваивается текущее значение флажка Enable.
Следующие операторы имееют ту же конструкцию, как и у флажка Visible, но только функция ShowWindow заменена на EnableWindow(), которая предназначена для того, чтобы элемент управления был недоступен или доступен. Она имеет те же параметры, что и функция ShowWindow.
Событие – изменение строки в окне редактирования.
Связывание кода с событием EN_CHANGE окна редактирования. В нашей программе при вводе слова CALCULATOR запускается калькулятор, а при вводе Paint - графический редактор Paint. Чтобы связать код с событием EN_CHANGE окна редактирования, напишите следующий код в функции OnChangeTestEdit():
void CTestDlg::OnChangeTestEdit() { ... // TODO: Add your control notification handler code here
////////Мой код начинается здесь///////////
///Обновить переменные UpdateData(TRUE); ///Содать переменную типа CString, присвоить ей значение ///переменной m_TestEdit и выполнить перевод символов в верхний ///регистр. CString UpperValue; UpperValue=m_TestEdit; UpperValue.MakeUpper();
///Если в окне редактирования напечатано PAINT ///запускается редактор PAINT и окно редактирования становится пустым. if(UpperValue=="PAINT") { system("pbrush.exe"); m_TestEdit=" "; UpdateData(FALSE); }
///Если в окне редактирования напечатано CALCULATOR ///запускается калькулятор и окно редактирования становится пустым. if(UpperValue=="CALCULATOR") { system("calc.exe"); m_TestEdit=" "; UpdateData(FALSE); }
////////Мой код заканчивается здесь///////////
}
Код который вы ввели содержит следующие операторы:
UpdateData(TRUE); обновляет переменную m_TestEdit значением содержимого окна редактирования, при каждом его изменении, так как окно редактирования связано с событием EN_CHANGE.
Следующий оператор CString UpperValue; содает новую переменную типа CString.
Затем переменной UpperValue приравнивается значение переменной m_TestEdit, это можно сделать, так как они имеют одинаковый тип.
Оператор UpperValue.MakeUpper(); переводит все символы переменной UpperValue в верхний регистр.
Оператор if(UpperValue=="PAINT"); проверяет, если введено ли слово PAINT, то выполняются следующие три оператора: Первый system("pbrush.exe"); запускает графический редактор, так как не указан явный путь к файлу, то программа будет искать его в каталоге C:\WINDOWS. Второй оператор m_TestEdit=""; присваивает переменной окна редактирования значение NULL, а следующий оператор UpadteData(FALSE) - обновляет экран. Вследствии этого, весь текст из окна редактирования удалится.
Заметьте, что мы перевели символы переменной UpperValue в верхний регистр - это нужно потому, что в языке С++ символы нижнего и верхнего регистра имеют разные значения, поэтому при переводе на верхний регистр, мы 100% будем уверены, что написанное нами слово PaInT совпадет с PAINT.
Следующая конструкция операторов полностью идеинтична предыдущей, только проверяется равно ли значение переменной m_TestEdit слову CALCULATOR, если да, то запускается калькулятор, и окно редактирования очищается.