Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скомпанованное пособие.docx
Скачиваний:
1
Добавлен:
07.05.2019
Размер:
3.3 Mб
Скачать

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 экз.

Отпечатано с готового оригинал-макета

в частной типографии Тугушева