- •Лабораторная работа № 1 Высокоуровневые методы разработки приложений в среде
- •1.1 Создание и сохранение проекта
- •1.2 Открытие, модификация и настройка параметров проекта
- •1.3 Создание форм и их модулей
- •1.4 Создание программных модулей
- •1.5 Построение интерфейса пользователя
- •1.6 Задания для самостоятельной работы в среде Delphi
- •Лабораторная работа № 2 Высокоуровневые методы разработки приложений в среде
- •2.1 Создание и сохранение проекта
- •2.2 Открытие, модификация и настройка параметров проекта
- •2.3 Создание форм и их модулей
- •2.4 Создание программных модулей
- •2.5 Построение интерфейса пользователя
- •Лабораторная работа № 3
- •Высокоуровневые методы разработки приложений на языке
- •C# в среде Visual Studio .Net
- •3.1 Среда Visual Studio и платформа .Net
- •3.2 Проекты и решения
- •3.3 Задания для самостоятельной работы Visual Studio .Net
- •Лабораторная работа № 4
- •4 Высокоуровневые методы разработки приложений на
- •4.1 Разработка программы на базе каркаса приложений
- •4.2 Создание остова приложения
- •4.3 Создание приложения с диалоговым интерфейсом
- •4.4 Создание приложения с однодокументным интерфейсом
- •4.5 Создание приложения с многодокументным интерфейсом
- •4.6 Задания для самостоятельной работы на пэвм
- •Initial status bar –добавляет строку состояния с индикаторами специальных клавиш;
- •440400, Г. Пенза, ул. Моковская, 74, к. 220, тел.: 56-37-16
Initial status bar –добавляет строку состояния с индикаторами специальных клавиш;
Printing and print preview – добавляет элементы меню для просмотра, установки параметров и печати документов;
Context-sensitive help – добавляет кнопку Help и три файла для создания контекстно-зависимой помощи: SDI.rtf, SDI.hpj, SDI.bat;
3D controls – добавляет трехмерное оформление элементов управления;
Windows sockets – обеспечивает создание сетевого приложения;
MAPI – позволяет написать приложение для получения, передачи и управления сообщениями, приходящими по электронной почте;
Recent File List –устанавливает число файлов, сохраняемых в списке самых последних использованных файлов;
Advanced/Document Template Strings – позволяет моди-фицировать имена файлов и расширений, связанных с приложением, а также задавать заголовок главного окна;
Advanced/Windows Styles – позволяет установить параметры окон: разделение окон (Use Split Window), включение системного меню(System menu), толщину рамки(Thick frame) и размеры окна(Minimize box, Minimized,Maximize box, Maximized).
11.Шаги 5 и 6 аналогичны шагам 3 и 4 при создании приложения, основанного на диалоге.
12. Щелкнуть по кнопке OK и в каталоге SDI познакомиться со всеми автоматически созданными каталогами и файлами, а также оценить размеры этих файлов.
Задание 4.8. Создать остов приложения с многодокументным интерфейсом, выполнив действия 2-го задания со следующими изменениями:
1.На первом шагает в окне Name задать имя проекта – MDI (Multiple Document Interface) (см. пункт 3).
2.В пункте 7 выбрать интерфейс приложения MultipleDocument.
3.Оценить изменения в составе файлов проекта.
Задание 4.9. Просмотреть все классы, методы и переменные созданных приложений, выполнив следующие действия:
1. Закрыть текущий проект с помощью команды: File/Close/Workspace.
2. Открыть требуемый проект при помощи команды:
File/Open/Wokspace/DBI.dsw, затем SDI.dsw и MDI.dsw.
3. На экране появляется окно проекта Workspace, в котором находится папка требуемого проекта. Если окно не видимо, следует выполнить команду View/Workspace.
4. Под окном проекта по очереди выбрать кнопки и познакомиться со структурами классов, ресурсов и исходных файлов проекта, а также с электронной документацией по Visual C++.
5. Откройте папку с классами проекта и в полученном дереве классов проекта познакомьтесь с методами и переменными классов, а также с глобальными переменными, раскрывая соответствующие узлы с помощью щелчка на знаке “плюс”. Обратить внимание на значки у методов и переменных, которые определяют спецификаторы доступа: private, protected и public.
6. Выбрать класс на дереве классов и дважды щелкнуть по имени класса, что обеспечит открытие окна документа с заголовочным файлом данного класса.
7. Выбрать метод на дереве классов и дважды щелкнуть по имени метода, что обеспечит открытие окна документа с файлом реализации данного класса, причем курсор будет указывать на выбранный метод.
8. Повторить пункт 7 для переменной класса и для глобальной переменной.
9. Выбрать метод или переменную класса и щелкнуть правой клавишей, после чего сделать переход на определение метода или на список ссылок соответственно для метода и для переменной. Установить и убрать точку прерывания для метода. Для построения списков ссылок Visual C++ создает файл ссылок с расширением *.bsc(browse file).
10. Выбрать имя класса и щелкнуть правой клавишей, что вызывает появление контекстного меню с командами Add Variables(добавить переменные) и Add Function (добавить метод).Используя эти команды, добавить переменные и функции для выбранного класса, посмотреть их в файлах *.h и *.cpp, а затем удалить их из класса.
11. Сделать добавление этих переменных и функций непосредственно в файлах *.h и *.cpp и убедиться, что появляются в дереве классов проекта.
Задание 4.10. Просмотреть ресурсы проекта, выполнив следующие действия:
1. Открыть в окне проекта папку с ресурсами.
2. Открыть папку ресурсов.
3. Выбрать требуемый ресурс и дважды щелкнуть по имени ресурса, что вызывает соответствующий редактор ресурсов.
4. Произвести некоторые изменения в ресурсе, а затем восстановить ресурс в исходное состояние.
5. С помощью команды Insert в главном или контекстном меню добавить, а затем удалить какой-либо ресурс. Контекстное меню вызывается щелчком правой кнопки мыши по имени ресурса.
Задание 4.11. Просмотреть все файлы проекта, выполнив следующие действия:
1. Открыть в окне проекта папку с файлами.
2. Открыть папку файлов.
3. Выбрать требуемый файл, дважды щелкнуть левой клавишей, и выполнить редактирование, а затем его отменить.
4. Выбрать новый файл и нажать правую клавишу, что открывает контекстное меню со следующими командами:
Open – открывает любой другой файл;
Settings – позволяет изменить установки отладчика, компи-лятора и других инструментальных средств;
Properties – позволяет просмотреть все объектные, исполняемые и другие файлы, которые компилятор строит из исходного, а также все подключаемые файлы.
Задание 4.12. Познакомиться с электронной документацией среды Visual C++, выполнив следующие действия:
1. Открыть перечень книг документов Visual C++.
2. Открывая поочередно все книги, построить полное дерево документации, в котором нераскрываемыми узлами являются темы.
3. Выбрать тему и дважды щелкнуть по ней, что приводит к выводу темы в окно просмотра.
4. Найти тему с описанием интерфейсов приложений и познакомиться с ней.
5. Внимательно изучить структуру электронной документации и убедиться в её наличии.
6. Синхронизировать окно просмотра темы с окном просмотра структуры документации, нажав клавиши Ctrl + S или щелкнув по левой кнопки панели инструментов категории Help. Синхронизация позволяет узнать, к какой книге относится просматриваемая тема.
7. Сделать несколько переходов по темам, используя точки перехода или листая темы вперед и назад, при этом наблюдать за переходами по книгам в окне со структурой документации.
8. Найти информацию по индексу – ключевому термину, выполнив команду Search в меню Help или контекстном меню (Ctrl + F) и задав ключевой термин. При удачном поиске выдается список тем и книг, в которые входит этот термин, при неудачном – ближайший контекст, который позволит уточнить термин.
9. Получить синтаксическую контекстную справку для выбранного элемента программы, установив курсор на этом элементе в окне просмотра документации и нажав на клавишу F1.
10. Получить контекстную справку по выбранному термину темы, выделив этот термин и нажав клавишу F1.
11. Создать новый файл в каталоге проекта и, используя буфер обмена, перенести в этот файл несколько тем, а затем перевести текст файла на русский язык, запустив переводчик с английского языка.
12. Распечатать необходимые темы, используя команду Print Topic контекстного меню или команду Print из меню File.
13. Сделать закладки в электронной документации для изучаемых тем, используя кнопки категории Help.
14. Найти необходимые сведения по запросу, выполнив команду Search/Query и задав запрос в виде одной строки или нескольких строк в апострофах, соединенных логическими связками And и Or.
15. Используя кнопки категории Help, познакомиться со списком открывавшихся при работе тем, которые сохраняются в History List, а также с результатом последнего запроса в Query Results.
16. Уменьшить область поиска, установив подмножество книг поиска с помощью команды Help/Define Subset.
17. Создать небольшой русскоязычный справочник и проверить возможность получения оригинальной справки на английском языке.
Задание 4.13. Скомпилировать и запустить на исполнение полученные основы приложений, выполнив следующие действия:
1. Открыть требуемый проект: DBI.dsw, SDI.dsw или MDI.dsw.
2. На панели инструментов справа установить вид сборки проекта – Win32 Release (коммерческий или производственный режим).
3. Создать исполняемый файл проекта, выполнив команду Build DBI(exe) и проследив за процессом создания файла, состоящим из нескольких этапов.
4. Оценить размеры исполняемого файла DBI.exe и выяснить, какие файлы получены в результате сборки проекта.
5. Запустить остов приложения DBI.exe на исполнение с помощью команды Build/Execute DBI.exe.
6. Изучить функциональное поведение остова приложения DBI.
7. Повторить все выше перечисленные действия для остова SDI, а затем и для остова MDI. Отметить разницу в их поведении.
Задание 4.14. Скомпилировать все полученные остовы приложений для отладочного режима и произвести их трассировку, выполнив следующие действия:
1. Открыть требуемый проект: DBI.dsw, SDI.dsw и MDI.dsw.
2. Установить вид сборки проекта – Win32 Debug(отладочный режим).
3. Создать исполняемый файл для отладочного режима, выполнив команду Build/Build DBI(exe).
4. Выяснить, какие файлы и где получены при сборке проекта для отладочного режима, а также оценить их размеры и сравнить с соответствующими файлами для рабочего режима.
5. Оценить влияние переключателя Settings/Generate Browse Info на размеры создаваемых при компоновке файлов.
6. Перейти в отладочный режим с помощью команды Build/ Debug,которая заменяет элемент Build главного меню на элемент Debug.
7. Произвести отладку остова приложения DBI,используя следующие отладочные команды:
Go(F5) – запуск или продолжение выполнения программы;
Restart – перезапуск программы;
Stop Debugging (Shift+F5) – останов отладки;
Insert/Remove Breakpoint – вставка или удаление точки прерывания;
Enable Breakpoint – включает или выключает точку прерывания;
Step Info (F11) – пошаговая отладка с пошаговым выполнением функций;
Step Over (F10) – пошаговая отладка с пошаговым выполнением функций за один шаг;
Step Out (Shift+F11) – выход из функции за один шаг;
Run to Cursor (Ctrl+F10) – выполнение до точки заданной курсором;
Quick Watch (Shift+F9) – непосредственное вычисление значений переменных и выражений;
8. Для отладочного и для рабочего режимов, сравните значения следующих параметров: Source code debugging, MFC diagnostic macros, Library linkage и Compiler optimization.
9. Убедиться, что в основе приложения DBI находится диагностические макросы TRACE, ASSERT и VERIFY и включить трассировку программы, вставив в ее текст оператор afxtrace=True или включить оператор Trace Enabled=1 в раздел [Diagnostics] файла AFX.INI,расположенного в подкаталоге Windows. При отладке подключается утилита Tracer,которая выдает данные в окно вывода. Заметьте, что диагностические макросы активизируют режим отладочной сборки проекта, но не требуют в коде отладочной информации.
10. Выяснить у системного программиста, установлено ли на компьютере отладочное ядро Windows, обеспечивающее сбор и выдачу очень важных сообщений об ошибках, возникающих в процессе отладки программ.
11. Повторить все выше перечисленные действия для остова SDI, а затем и для остова MDI.
12. Выяснить назначения в программах файлов StdAfx.h и StdAfx.cpp, а также ключей компилятора /Yx, /Yu, /Yc и /Yp. Обеспечить для трех остовов приложений использование одного предкомпилированного заголовочного файла ALL.pch.
13. В конце занятий необходимо файлы *.pch удалять из-за их огромных размеров (порядка 4 Мб).
14. Оценить скорость компиляции при наличии файла *.pch и при его отсутствии.
Задание 4.15. Используя мастер приложений AppWizard, редактор ресурсов и мастер классов ClassWizard студии разработчика Visual C++, создать приложение, реализующее описанный в разделе 3.3 сценарий приветствия. При создании приложения рекомендуется придерживаться следующего порядка действий:
1. Создать остов приложения, основанного на диалоге, задав имя Hello и выбрав соответствующий рабочий каталог.
2. Скомпилировать и запустить полученный остов Hello. Появившееся окно стартового приложения содержит раскрывающееся системное меню со стандартными элементами Move,Close и About, а также две команды для кнопок OK и Cancel и статический текст, информирующий о том, что в окно можно поместить элементы управления.
3 . Открыть окно ресурсов проекта и папку ресурсов Dialog.
4. Выделить ресурс с идентификатором IDD_HELLO_DIALOG, связанный с объектом класса CHelloDlg, который создал AppWizard от базового класса Cdialog библиотеки MFC.
5. Щелкнуть правой кнопкой и из контекстного меню Properties выбрать язык ресурса Russian.
6. Войти в редактор ресурсов, дважды щелкнув на идентификаторе IDD_HELLO_DIALOG. В окне редактора ресурсов появится диалоговое окно приложения и две панели инструментов: одна с набором элементов управления, другая с элементами компоновки в окне.
7. Выбрать из панели инструментов командную кнопку и разместить ее в окне приложения.
8. Щелкнуть по кнопке правой клавишей и в контекстном меню выбрать элемент Property.
9. На странице свойств командной кнопки в окне Caption заменить имя кнопки “Button1” на ”Вы”, а в окне ID – идентификатор “IDC_Button1” на ”IDC_You”.
10. Повторить пункты 7, 8 и 9 для командной кнопки ”Компьютер”, связав с ней идентификатор IDC_Comp.
11. Удалить в окне приложения статический текст, выделив его и нажав клавишу Del.
12. Выбрать из панели инструментов элемент “Статический текст” и разместить его в окне приложения.
13. С помощью контекстного меню изменить свойство Caption, задав фразу “Поздоровайтесь коллеги!”.
14. На панели инструментов выбрать окно редактирования и перенести в окно приложения.
15. С помощью контекстного меню в окне Caption набрать строку из символов подчеркивания, а в окне ID задать имя IDC_ED_You.
16. Повторить пункты 14 и 15, задав в окне ID имя IDC_ED_Comp, а в окне Caption – строку из символов подчеркивания.
17. Используя инструменты компоновки, разместить элементы управления на окне приложения в соответствии с требованиями дизайна.
18. С помощью контекстного меню для окон редактирования отменить свойство AutoHScroll (автоматическая горизонтальная прокрутка) и установить свойство Multi-line (многострочный).
19. Для просмотра диалогового окна при выполнении приложения включить тумблер слева на панели компоновки.
20. На диалоговом окне приложения щелкнуть правой кнопкой мыши и из контекстного меню вызвать мастер классов ClassWizard.
21. На вкладке MessageMaps в окне ObjectIDC выбрать IDC_You.
22. В окне возможных сообщений для кнопки Messages выбрать сообщение BN_CLIKCED, которое возникает при щелчке правой кнопкой мыши.
23. Щелкнуть по кнопке Add Function, в результате чего ClassWizard предложит создать функцию обработки сообщения BN_CLICED с именем OnYou.
24. Щелкнуть по кнопке ОК и посмотреть остов функции OnYou.
25. Повторить пункты 21-24 для кнопки Компьютер, в результате чего будет создан остов функции OnComp.
26. Связать окно редактирования пользователя You с переменной класса CHelloDlg, выбрав в окне ClassWizard вкладку Member Variables и отметив идентификатор IDC_ED_You, для которого указать имя переменной m_You в окне AddVariables.
27. В окне AddVariables задать категорию переменной Control и тип CEdit, в результате ClassWizard создаст переменную m_You типа CEdit в классе CHelloDlg.
28. Повторить пункты 26 и 27 для окна редактирования IDC_ED_Comp, используя имя m_Comp той же категории и того же типа.
29. Открыть папку HelloClasses и найти в классе CHelloDlg переменные m_You и m_Comp.
30. Закрыть папку HelloClasses и щелкнуть правой кнопкой мыши.
31. В контекстном меню выбрать элемент AddVariables и задать в диалоговом окне имя переменной Count для подсчета числа щелчков по кнопке Компьютер, а также ее тип UINT и статус protected.
32. Повторить пункт 31 для задания переменной InviteDone, определяющей статус компьютера и имеющий тип BOOL в разделе protected.
33. Выбрать в классе 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=TRUE;
}
else
{ m_You.GetWindowText(s2);
if(s2= =” ”) s2=”люди”;
m_Comp.SetWindowText(“Здравствуйте,” + s2+”Всегда рад с вами работать!”);
m_You.SetWindowText(“”);
}
36.Скомпилировать программу и запустить ее на исполнение, а затем реализовать сценарий диалога.
37.изучить детальную структуру программы, запустив браузер классов с помощью команды Tools/Browse/BaseClasses and Members, а также включив окно просмотра классов проекта с помощью кнопки ClassView.
Задание 4.16. Создать приложение с использованием динамического обмена данных, обеспечиваемого API-функцией UpdateData(Bool), выполнив следующие изменения в обработчиках сообщений:
1. Заменить код функции обработки 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. Скомпилировать программу и проверить работоспособность приложения.
Задание 4.17. Используя динамический обмен данными, создать приложение для ввода/вывода структур и массивов.
Задание 4.18. Создать приложения с однодокументным интерфейсом, реализующие диалог пользователя с компьютером, выполнив следующие действия:
1. Создать остов приложения, основанный на однодокументном интерфейсе SDI, задав имя Scene и выбрав подходящий каталог, при этом на этапе модификации созданных классов для класса SceneView заменить базовый класс CView на класс CFormView,что позволит в окне установить управляющие элементы.
2. Включить в файл SceneDoc.h описания переменных ys и cs для хранения состояния персон You и Computer:
NO_TALK, TALK,DOUBLE_TALK и FINISH_TALK:
//Attributes
public:
enum State {NO_TALK, TALK, DOUBLE_TALK, FINISH_TALK};
State ys;//-состояние персоны You;
State cs;//-состояние персоны Computer;
3. Включить в файл Scene Doc.h описание методов, изменяющих документ в результате действий, предпринимаемых персонами You и Computer соответственно:
//Operations
public:
CString YouChange ( ); //-для изменения состояния You;
CString ComputerChange (BOOL* Flag ); //-для изменения состояния Computer;
4. В файле SceneDoc.cpp переопределить виртуальный метод инициализации документа:
BOOL CCseneDoc::OnNewDocument ( )
{if (! CDocument::OnNewDocument ( ))
return FALSE;
ys=cs=NO_TALK;//-начальное состояние персон;
return TRUE;
}
5. В конце файла SceneDoc.cpp добавить реализации новых методов YouChange( ) и ComputerChange (BOOL* Name Flag ):
Cstring CSceneDoc:: YouChange( )
{switch (ys)
{case NO_TALK: ys=TALK;
return (“Привет компьютер!”);
case TALK: ys=DOUBLE_TALK;
return (“Компьютер,проснись!”);
case DOUBLE_TALK: cs=TALK;
return (“Поздоровайся,наконец!”);
}
return “”;
}
C String CSceneDoc::ComputerChange (BOOL* Name Flag )
{ * Name Flag= FALSE;
switch (cs)
{case TALK: ys= FINISH_TALK;
cs=DOUBLE_TALK;
return (“Совет дня:Никогда не разговаривайте с
неизвестными ! Ваше имя,пожалуйста.”);
case DOUBLE_TALK: cs=FINISH_TALK;
*NameFlag=TRUE;
return (“Здравствуйте,люди! Всегда рад с
Вами работать!”);
}
return “”;
}
6. Отредактировать ресурс IDD_SCENE_FORM класса CSceneView, включив в него командные кнопки IDC_You и окна редактирования IDC_ED You и IDC_ED Comp.
7. В файле CSceneView.h модифицировать класс CSceneView, добавив две переменные m_ys и m_ce для обмена данными с окнами редактирования IDC_ED You и IDC_ED Comp,а также два метода OnYou и OnComp для обработки сообщений BN_CLICKED от кнопок IDC You и IDC Comp.
8. В файле CSceneView.cpp добавить операторы для методов OnYou и OnComp:
void CSceneView::OnYou ( )
{ CString Str;
Str=GetDocument ( )-> YouChange ( );
m_ys.SetWindowText (Str);
}
void CSceneView::OnComp ( )
{ BOOL NameFlag;
C String Str, Name;
int Pos;
Str=GetDocument ( )->ComputerChange (&Name Flag);
If (Name Flag)
{ m_ye.GetWindowText (Name);
if (!Name.IsEmpty( ))
Str=Str.Left (Pos=Str.Find (“люди”))+Name+Str.Mid ( Pos+4);
}
m_ce.SetWindowText (Str);
}
9. Скомпилировать приложение и проверить выполняемые им функции.
Задание 4.19.Создать многодокументный текстовый редактор, выполнив следующие действия:
1. Создать остов приложения, выбрав тип Multiple Document и отменив установки Docking toolbar, Initial status bar, Printing and print preview, а на последнем этапе задав в качестве базового класса для CMdiView класс CEditView.
2. Откомпилировать проект, выбрав для него имя Мdi.
3. Запустить полученное многодокументное приложение на исполнение, открыть несколько текстовых файлов или создать новые и проверить команды меню Edit, а также команды меню Windows.
Задание 4.20. Создать многодокументный редактор-словарь переводчика, выполнив следующие действия:
1. Создать остов однодокументного приложения, выбрав интерфейс SDI, задав имя проекта Dict и заменив базовый класс CView на CFormView для класса облика CDictView.
2. Выбрать построенный мастером AddWizard ресурс формы с идентификатором IDD_DICT_FORM.
3. Разместить в форме два окна для редактирования термина и его определения с идентификаторами соответственно IDC_Termin и IDC_Translate, задав при этом для второго окна свойство Multi-line и отключив свойство AutoHScroll.
4. Для окон редактирования вставить поясняющий текст: «Термин» и «Определение термина».
5. Разместить в форме три командные кнопки для выполнения операций над словарем: «Добавить/Заменить», «Найти» и «Удалить», определив их идентификаторы соответственно как IDC_Add, IDC_Find и IDC_Del.
6. Разместить в форме окно списка для отображения словаря, определив для него идентификатор IDC_LDict.
7. Связать окно IDC_Termin с переменной m_strTermin категории Value типа CString, имеющей статус public.
8. Связать окно IDC_Translate с переменной m_strTranslate категории Value типа CString, имеющей статус public.
9. Связать окно IDC_LDict с переменной m_strLDict категории Controls типа CListBox, имеющей статус public.
10. С помощью мастера ClassWizard создать остовы методов обработки сообщений для трех командных кнопок, связав эти остовы с классом CDictView и задав им следующие имена:
a) для кнопки с идентификатором IDC_Add_– OnAddOrUpdate;
b) для кнопки с идентификатором IDC_Find_– OnFind;
c) для кнопки с идентификатором IDC_Del_– OnDel.
11. Для представления словаря как документа выбрать класс отображения строк в строки CMapStringToSting и добавить в класс документа CDictDoc новую переменную для словаря:
public:
CMapStringToSting m_Dict; //-имя словаря терминов;
12. Доопределить в класс CDictDoc специальный метод Serialize для сохранения и загрузки словаря из файла, остов которого создан мастером AddWizard:
void CDictDoc::Serialize(CArchive ar)
{ if (ar.IsStoring())
{}
else
{m_Dict. Serialize(ar);}//-новая строка для чтения/записи;
}
13. Переопределить метод OnInitialUpdate, который автома-тически вызывается при создании или открытии уже созданного документа:
void CDictDoc::OnInitialUpdate()
{CFormView::OnInitialUpdate();//-для базового класса;
m_ctrlDict.ResetContent();//-список терминов очищается;
CString strKey, //-термин-ключ;
StrValue; //-определение термина;
CMapStringToString &map=GetDocument()->m_Dict;
POSITION pos=map.GetStartPosition();
while (pos !=NULL) //-перипись словаря в список:
{map.GetNextAssoc(pos, strKey, strValue);
CString s=strKey+_T(“<->”)+strValue;
m_ctrlDict.AddString(s);
}
pos=map.GetStartPosition();
if (pos!=NULL) //-инициализация окон для термина:
map.GetNextAssoc(pos, m_strTermin, m_strTranslate);
else { m_strTermin=_T(“”);
m_strTranslate=_T(“”);
}
UpDateData(FALSE); //-запись в окна редактирования;
14. Включить в класс CDictView обработчик сообщения от кнопки «Добавить/Заменить»:
void CDictDoc::OnAddOrUpdate()
{ if (!UpdateDate()) //-если данные прочитаны из окон с ошибкой:
return;
int nIndex=FindKeyInList(m_ strTermin);
if (nIndex!=LB_ERR) //-если термин найден, то:
m_ctrlDict.DeleteString(nIndex); //-для замены;
CString s= m_strTermin+_(“<->”)+ m_strTranslate;
m_ctrlDict.AddString(s);
m_ctrlDict.SetCurSel(nIndex); //-выделение нового термина;
GetDocument()->m_Dict[m_strTermin]= m_strTranslate;
GetDocument()->SetModifiedFlag(); //-словарь изменен;
}
15. Включить в класс CDictView обработчик сообщения от кнопки «Найти»:
void CDictView::OnFind()
{if (!UpdateDate/()) return; /-если данные не поступили из окон:
CString strValue;
if(GetDocument()->m_Dict.Lookup(m_strTermin, m_strTranslate)
!=TRUE)
m_strTranslate=”: – В словаре нет термина ”+ m_ strTermin;
else
FindKeyInList(m_ strTermin);
UpdateDate(FALSE); //-запись в окна редактирования;
}
16. Включить в класс CDictView обработчик сообщения от кнопки «Удалить»:
void CDictView::OnDel()
{if (!UpdateDate()) return; //-если термин не введен, то:
CString strValue;
if(GetDocument()->m_Dict.Lookup(m_strTermin, m_strTranslate)!
=TRUE)
m_strTranslate=”: – В словаре нет удаляемого термина ”+
m_ strTermin;
else
{int nIndex= FindKeyInList(m_ strTermin);
m_ctrlDict. DeleteString(nIndex);
GetDocument()->m_DictRemoveKey(m_strTermin);
}
UpdateDate(False);
GetDocument()->SetModifiedFlag();
}
17. Добавить в класс CDictView вспомогательную функцию поиска термина в списке:
int CDictView::FindKeyInList(CString& strKey)
{Cstring strValue;
if(GetDocument()->m_Dict.Lookup(strKey, strValue)!=TRUE)
return LB_ERR;
CString s =strKey +”<->”+strValue;
Int Index = -1;
String s1 = - T(“ ”);
do { Index = m_ctrlDict.FindStringExact(Index, s);
m_ctrlDict.GetText(Index, s1);
if ( s= = s1) break;
}
while (TRUE);
m_ctrlDict.SetTopIndex(Index);//-установить элемент вверху;
m_ctrlDict.SetGurSel(Index);//- выделить текущий элемент;
return Index;
}
18. Скомпилировать проект Dict и проверить его работоспособность.
19. Включить классы CDictDoc и CDictView проекта Dict в галерею компонентов с помощью команды Add to Component Gallary контекстного меню окна просмотра классов.
20. Открыть проект Mdi и с помощью команды Insert/ Component Gallary вставить в него классы CDictDoc и CDictView.
21. Дополнить метод InitInstance() класса CMdiApp фрагментом кода, обеспечивающем включение документного шаб-лона для создания объектов новых классов:
CMultiDocTemplate* pDictDocTemplete; //- в файл Мdi.cpp;
pDictDocTemplete = new CMultiDocTemplate
(IDR_DICTTYPE,
RUNTIME_CLASS(CDictDoc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CDictView ));
AddDocTemplate(pDictDocTemplate);
22. В файл Mdi.h вставить директивы:
# include “ DictDoc.h”
# include “ DictView.h”
23. Переписать указанные файлы DictDoc.h и DictView.h в проект Mdi.
24. Определить идентификатор IDR_DICTTYPE с помощью команды View/Resource Symbols/New, введя в поле Name IDR_DICTTYPE, а в поле Value число – значение идентификатора, которое должно быть больше значений идентификаторов IDR_MAINFRAME и IDR_MDITYPE.
25. Для идентификатора ресурса IDR_DICTTYPE с помощью команды Resource View/String Table/Правая кнопка мыши/Language установить язык Russian, а затем с помощью команды Resource View/String Table/Двойной щелчок для вызова таблицы строк/Правая кнопка мыши/New String/ String Properties задать в поле ID идентификатор IDR_DICTTYPE, а в поле Caption следующую строку:
\nDictDoc\NСловарь\nФайл типа словарь
(*.dic)\ n.dic\ nMdiDictionary\n Словарь приложения Mdi.
В общем случае структура строки такова:
<windowsTitle>\n<docName>\n<fileNewName>\n<filterName>\n <filterExt>\n<regFileTypeId>\n<regFileTypeName>,
где
<windows Title> – имя, являющееся частью заголовка главного окна и используемое для приложения с SDI-интерфейсом;
<docName> – базовая часть стандартного имени документа, открываемого командой New, за которой идет порядковый номер документа( по умолчанию – Untitled);
<fileNewName> – имя типа документа, которое появляется в списке типов для команды New;
<filterName> – описание типа документа и фильтра для команды File/Open;
<filterExt> – расширение для документа данного типа;
<regFileTypeId> – идентификатор типа документа для хранения в системном реестре;
<regFileTypeName> – имя типа документа для хранения в системном реестре;
26. Для идентификатора ресурса IDR_MDITYPE аналогичным образом зададим следующую строку:
\n TextDoc\nТекстовый документ\n Файл типа текстовый документ(*.tek)\n.tek\nMdiTextDocument\n Текстовый документ приложения Mdi.
27. Создать меню для идентификатора IDR_DICTTYPE, в точности повторяющее меню проекта Dict, с помощью команды Resource View/Menu/Щелчок правой кнопкой по IDR_МDITYPE/Insert Copy/ Insert Resource Copy/ Russian/Ok установив язык ресурса, с помощью щелчка правой кнопки мыши и команды Properties заменив IDR_МDITYPE на IDR_DICTTYPE, а затем отредактировав это меню.
28. Создать для IDR_DICTTYPE таблицу ускорителей, открыв таблицу IDR_ACCELERATOR с помощью команды: Щелчок правой кнопкой по элементу Accelerator вкладки Resource View/Insert Accelerator/ Щелчок правой кнопки по IDR_ACCELERATOR1 и установив идентификатор IDR_DICTTYPE, а затем добавив ускорители из проекта Dict.
29. Создать для IDR_DICTTYPE иконку, с помощью команды Resource View/Icon/ Щелчок правой кнопки IDR_МDITYPE/Insert Copy создав копию значка и заменив идентификатор ресурса на IDR_DIСТTYPE, а затем с помощью редактора ресурсов отредактировав копию значка по своему усмотрению (включив в него надпись ”СЛОВАРЬ”).
30. Для обеспечения регистрации типов используемых в приложении документов дополнить метод СMdiApp::InitInstance() следующими операторами, обеспечивающими запись необходимой информации в системном реестре Windows:
CMainFrame* pMainFrame = new CMainFrame();
if(!pMainFrame->LoadFrame(IDR_MAINFRAME))
return FALSE;
m_pMainWnd = pMainFrame;
EnableShellOpen();
RegisterShellFileTypes(TRUE);
31. Скомпилировать проект Mdi, создать текстовый файл и словарь, сохранить их, а затем открыть в нескольких окнах и убедиться в работоспособности текстового редактора и словаря во всех открытых окнах.
Задание 4.21. Модифицировать текстовый редактор – словарь, включив в него средства взаимодействия между документами, которые обеспечивали бы следующие возможности:
а) быстрое копирование фрагментов текста из одного окна в другое;
б) нахождение определения термина, указанного курсором в тексте;
в) вставку термина в любое место любого текстового доку-мента, а также и его определения;
г) наличие нескольких словарей по темам;
д) представление пользователю списков открытых текстовых документов и словарей.
С О Д Е Р Ж А Н И Е
Лабораторная работа № 1. Высокоуровневые методы разработки приложений в среде Delphi………………. 3 Лабораторная работа № 2. Высокоуровневые методы разработки приложений в среде Builder C++………… 3 Лабораторная работа № 3. Высокоуровневые методы разработки приложений на языке C# в среде Visual Studio .NET...................................... 3 Лабораторная работа № 4. Высокоуровневые методы разработки приложений на языке C++ в среде Visual Studio .NET…….………………….. 3
Список использованных источников…………………………….……….…. 89
|
Подписано к печати 04.02.2010г. Бумага ксероксная.
Формат 60x84 1/16. Печать RISO.
Усл. печ. л. 3,5. Заказ 04/02. Тираж 100 экз.
Отпечатано с готового оригинал-макета
в частной типографии Тугушева