ЛАБОРАТОРНАЯ РАБОТА №4-5 СОЗДАНИЕ ПРИЛОЖЕНИЯ С ДИАЛОГОВЫМ ИНТЕРФЕЙСОМ
Цель работы - приобретение навыков в построении приложений, основанных на диалоговом интерфейсе и библиотеки MFC с использованием мастера приложений, редактора ресурсов и мастера классов студии разработчика Visual C++.
Требуется разработать приветствие-диалог между двумя субъектами: пользователем и компьютером. Пользователь You здоровается с компьютером .На первые два приветствия компьютер не отвечает. После третьей попытки он советует никогда не разговаривать с неизвестными и предлагает представиться . Пользователь называет себя ,и компьютер любезно здоровается с ним.
Для реализации сценария приветствия необходимо использовать диалоговое окно с двумя командными кнопками :"Вы" и "Компьютер", соответствующие объектам - участникам диалога. Объекты должны иметь соответствующие окна редактирования , где будет появляться текст диалога . Пользователь инициирует диалог щелчком той или иной командной кнопки . Программа, реагируя на события, вызванные действиями пользователя ,выдает соответствующие реплики в окнах редактировыания .На определенном этапе диалога пользователь сможет ввести свое имя в окно редактирования.
Задание 1.
Используя мастер приложений AppWizard,редактор ресурсов и мастер классов ClassWizard студии разработчика Visual C++ , создать приложение, реализующее описанный выше сценарий приветствия .При создании приложения рекомендуется придерживаться следующего порядка деуствий:
1. Создать остов приложения, основанного на диалоге , задав имя Hello и выбрав соответствующий рабочий каталог.
2. Скомпелировать и запустить полученный остов Hello .Появившееся окно стартового приложения содержит раскрывающееся системное меню со стандартными элементами Move,Close и About, а также две командны е кнопки OK и Cancel и статический текст,информирующий о том ,что в окно можно поместить элементы управления .
3. Открыть окно ресурсов проекта ипапку ресурсов Dialog.
4. Выделить ресурс с идентификатором IDD_HELLO_DIALOG,связанный с объектом класса ChelloDlg, который создал AppWizart от базового класса Cdialog библиотеки MFC.
5. Щелкнуть правой кнопкой и из контекстного меню Properties выбрать язык ресурса Russian.
6. Войти в редактор ресурсов , дважды щелкнув на идентификаторе IDD_HELLO_DIALOG. В окне редактора ресурсов появляется диалоговое окно приложения и две панели инструментов :одна с набором элементов управления , другая с элементами компановки в окне.
7. Выбрать из панели инструментов командную кнопку и разместить ее в окне приложения .
8. Щелкнуть по кнопке правой клавишей и в контекстном меню выбрать элемент Property.
9. На странице свойств командной кнопки в окне Caption заменить имя кнопки
10."Button1" на "Вы", а в окне ID- идентификотор "IDS_Button1" на "IDS_You".
11.Повторить пункты 7,8 и 9 для командной кнопки "Компьютер", связав сней идентификатор IDC_Comp.
12.Удалить в окне приложения статический текст, выделив его и нажав клавишу Del.
13.Выбрать из панели инструментов элемент "Статический текст" и разместить его в окне приложения.
14.С помощью контекстного меню изменить свойство Caption, задав фразу "Поздоровайтесь коллеги!".
15.На панели инструментов выбрать окно редактирования и перенести в окно приложения.
16.С помощью контекстного меню в окне Caption набрать строку из символов подчеркивания, а в окне ID задать имя IDC_ED You.
17.Повторить пункты 14 и 15, задав в окне ID имя IDC_EDComp, а в окне Caption-строку из символов подчеркивания.
18.Используя инструменты компановки, разместить элементы управления на окне приложения с требованиями дизайна.
19.С помощью контекстного меню для окон редактирования отменить свойство AutoHScroll(автоматическая горизонтальная прокрутка) и установить свойство Multi-Line (многострочный).
20.Для просмотра диалогового окна при выполнении приложения включить тумблер слева на панели компановки.
21.На диалоговом окне приложения щелкнуть правой кнопкой мыши и из контекстного меню вызвать мастер классов ClassWizard.
22.На вкладке MessageMaps в окне ObjectIDS выбрать IDC_You.
23.В окне возможных сообщений для кнопки Messages выбрать сообщение BN_CLICED, которое возникает при щелчке правой кнопкой мыши.
24.Щелкнуть по кнопке Add Function, в результате чего ClassWizard предложит создать функцию обработки сообщению BN_CLICED с именем On You.
25.Щелкнуть по кнопке ОК и посмотреть остов функции OnYou.
26.Повторить пункты 21-24 для кнопки Компьютер, в результате чего будет создан остов функции OnComp.
27.Связать окно редактирования пользователя You с переменной класса CHelloDlg, выбрав в окне ClassWizard вкладку Member Variables и отметив идентификатор IDC_ED You, для которого указать имя переменной m_You в окне AddVariables.
28.В окне AddVariables задать категорию переменной Control и тип Cedit, в результате ClassWizard создаст переменную m_You типа CEdit в классе ChelloDlg.
29.Повторить пункты 26 и 27 для окна редактирования IDC_EDComp, используя имя m_Comp той же категории и того же типа .
30.Открыть папку HelloClasses и найти в классе CHelloDlg переменные m_You и m_Comp.
31.Закрыть папку HelloClasses и щелкнуть правой кнопкой мыши.
32.В контекстном меню выбрать элемент AddVariables и задать в диалоговом окне имя переменной Count для подсчета числа щелчков по кнопке Компьютер, а также ее тип VINT и статус protected.
33.Повторить пункт 31 для задания переменной InviteDone, определяющей статус компьютера и имеющий тип BOOL в разделе protected.
34.Выбрать в классе ChelloDlg метод OnInitDialog и добавить в него код для инициализации переменных::
Count= 0;
InviteDone=False;
34.Выбрать обработчик OnYou и дополнить его кодом : switch (++Count)
{ case 1: //-первый щелчок:
m_You. SetWindowText( "Привет компьютер!"); break; case 2: //-второй щелчок:
m_You. SetWindowText("Компьютер,проснись!"); break;
Есенбек А. И.
case 3: //-третий щелчок:
m_You.SetWindowText("Поздоровайся ,наконец!"); break;
}
35.Выбрать обработчик OnComp и дополнить его кодом:
CString s1="Совет дня: Никогда не разговаривайте с неизвестними!
Ваше имя ,пожалуйста.", s2="";
if( Count >=3 ) if(! InviteDone)
{m_Comp.SetWindowText(s1); m_You. SetWindowText("") InviteDone=TRUEelse
{ m_You.GetWindowText(s2); if(s2= =" ") s2="люди"; m_Comp.SetWindowText("Здравствуйте," + s2+"Всегда рад с вами
работать!"); m_You. SetWindowText("");
}
36.Скомпилировать программу и запустиь на исполнение, а затем реализовать сценарий диалога. 37.изучить детальную структуру программы, запустив броузер классов с помощью команды Tools/Browse/BaseClasses and Members, а также включив окно просмотра классов проекта с помощью кнопки Class View.
Задание2.
Создать приложение с использованием динамичкского обмена данных, обеспечиваемого API-функцией UpdateData(Bool), выполнив следующие изменения в обработчиках сообщений: Заменить код функции обработки OnYou на новый код: switch (++Count) { case 1: m_You= "Привет компьютер!";
UpdateData(FALSE);//-ввод в окно; break; case 2: m_You= "Компьютер,проснись!";
UpdateData(FALSE); //-повторный ввод ; break;
case 3: m_You= "Поздоровайся ,наконец!";
UpdateData(FALSE); //-последний ввод ; break; default: UpdateData(TRUE);//-чтение из окна;
}
2.Заменить код функции обработки OnComp на новый код: CString s1="Совет дня: Никогда не разговаривайте с неизвестними! Ваше имя ,пожалуйста.", s2;
if( Count >=3 ) if(!InviteDone) {m_Comp =s1; m_You= " "; InviteDone=TRUE; UpdateData(FALSE);
} else
UpdateData(TRUE); if{ m_You= =" ") m_You="люди";
m_Comp("Здравствуйте," + m_You +"Всегда рад с Вами работать!");
m_You=" ";
UpdateData(FALSE);
} 3.Для переменных m_You и m_Comp выбрать категорию Value и тип Cstring;
Это приведет к тому , что мастер классов ClassWizard создаст остов класса с другим механизмом ввода/вывода, обеспечиваемом функцией UpdateData(Bool),
причем значение FALSE параметра этой функции обеспечивает передачу из всех связанных строковых переменных в соответствующие окна редактирования, а значения TRUE- обратную передачу. 4.Добавить в определение метода OnInitDialog инициализацию строковых переменных: m_You=" "; m_Comp=" ";
5.Скомпелировать программу и проверить работоспособность приложения.
Задание 3. Используя динамический обмен данными , создать приложение для ввода/вывода структур и массивов.
Контрольные вопросы.
1. Объясните , какие коды создал мастер ClassWisard для обработки
сообщений о нажатии кнопок "Вы" и "Компьютер". 2.Поясните процедуру связывания переменных класса с сокнами редактирования .
3 .Поясните процедуру связывания строковых переменных с окнами редактирования и действия , выполняемые функцией UpdateData(Bool), при динамическом обмене данных.
4.Перечислите все функции которые используются при динамическом обмене.
5.Объясните возможности броузера классов и назовите условие, при котором его можно включить в работу.