Лабораторная работа №1 разработка программы на базе каркаса приложений — КиберПедия 

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Лабораторная работа №1 разработка программы на базе каркаса приложений

2017-05-16 279
Лабораторная работа №1 разработка программы на базе каркаса приложений 0.00 из 5.00 0 оценок
Заказать работу

Задание №1.

Вручную набрать исходный код приложения и создать исполняемый файл МуАрр.ехе, выполнив следующие действия:

1. Открыть новый файл под именем Му Арр. h с помощью команды File/ New/ File/ C/C++ Header Files.

2. Набрать для него исходный код и сохранить в рабочем каталоге.

3. Открыть новый файл под именем МуАрр.срр с помощью команды File/ New/ File/ C++ Source Files.

4. Набрать для него исходный код и сохранить в том же рабочем каталоге.

5. Создать новый проект с помощью команды File/ New/ Project/ Win32 Application/ Finish или ОК, задав ему имя Му Арр.

6. Включить в проект файлы My App.h и MyApp.cpp с помощью команды Project/ Add to Project/Files, отметив их в открывшемся диалоговом окне и нажав кнопку ОК.

7. Просмотреть в окне проекта включенные файлы, производные классы и ресурсы проекта.

8. С помощью команды Project/ Settings/ Вкладка General установить тип используемых библиотек Uses MFC in a Shared DLL.

9. 9. Создать исполняемый файл проекта с помощью команды Build/ Build MyApp.exe. 10.Запустить полученное приложение на работу командой Build/ Execute MyApp.exe и проверить его функциональное поведение.

11. Объяснить, почему не обрабатывается сообщение при нажатии левой клавиши мыши.

Задание №2.

Исполнить полученный исполняемый файл в отладочном режиме, выполнив следующие действия:

1. Запустить программу в отладочном режиме Build/ Start Debug/ Go.

2. Проанализировать содержимое окна вывода.

3. На окне приложения щелкнуть левой клавишей мыши и найти выдаваемое при этом приложением сообщение в окне вывода Output.

4. Перемещая курсор по окну приложения, щелкать левой клавишей мыши и наблюдать выдачу очередных сообщений в окне вывода.

5. Включить в исходный текст МуАрр.срр несколько точек прерывания и исполнить команду Build/Debug/ Go.

6. Убедиться, что элемент меню Build заменен пунктом Debug.

7. Используя клавишу F10 или элемент меню Debug/ Step Over, выполнить пошаговую отладку приложения.

8. Исполнить команду Debug/ Stop Debugging и убедиться, что элемент Debug заменен пунктом Build.

9. Включив достаточное число точек прерывания, произвести пошаговую отладку для проверки выполнения всех функций приложения.

Задание №3.

Дополнить исходный код приложения обработчиком сообщения о нажатии правой клавиши мыши, скомпилировать проект и убедиться в правильности функционирования программы.

Байтыш Ұ. Ө.

Задание №4.

Ознакомиться с командами главного меню, панели инструментов и окнами студии разработчика Visual C++, уяснив при этом следующие свойства и возможности:

1. Изменение элементов главного меню в процессе работы над проектом приложения.

2. Наличие следующих окон документов:

 

a) окно проекта Project Workspace для просмотра классов проекта, его ресурсов и файлов;

b) окно вывода Output, в которое направляются сообщения от инструментальных средств:
компилятора, отладчика и др.;

c) окно просмотра информации Info Viewer Topic при работе с электронной документацией;

d) окна, используемые при отладке: Watch, Variables, Register, Memory, Call Stack и Disassembly.

3. Два состояния многих окон: плавающее состояние, когда они легко переносятся в любое место окна студии разработчика; стыковочное состояние, когда окно присоединяется к какой-либо стороне окна студии.

4. Наличие устанавливаемых и удаляемых пользователем панелей инструментов: Standard, Project, Resource, Edit, Debug, Browse, Info Viewer, Info Viewer Contents, File, Insert, Build, Tools, Layout, Windows, H_elp и др.

 

Задание №5.

Найти в каталогах программу на Си под Windows и создайте исполняемый файл в
среде Visual C++.

Контрольные вопросы:

1. Перечислитевсе компоненты Visual C++ и выясните, какие из них установлены в студии разработчика данного компьютера. Охарактеризуйте две системы программирования, поддерживаемые Visual C++.Назовите основные классы и методы приложения, построенного на базе каркаса приложений.Опишите работу такого риложения.

2. Напишите строки исходного кода для обработки сообщения ОN_WM_LBUTTONDOWN.

3. Найдите описание указателя m_pMainWnd.

4. Перечислите основные методы класса CWinApp и укажите, какие из них являются виртуальными.

5. Перечислите основные методы класса CFrameWnd и укажите, какие из них являются виртуальными.

6. Найдите в исходных кодах Visual C++ определения макросов DECLARE_MESSAGE_MAP(), BEGIN_MESSAGE_MAP(...,...), END_MESSAGE_MAP().

7. Объясните, почему в библиотеке MFC обработчики сообщений о событиях не являются виртуальными, вспомнив, что число производных от CWin классов около 20, что число обрабатываемых сообщений в Windows более 140 и что в таблице диспетчеризации виртуальных функций требуется включать на каждую такую функцию 4 байта.

8. Объясните назначение карты сообщений MessageMap.

9. Объясните как имя сообщения Windows, например WM_LBUTTONDOWN, связано с именем соответствующего элемента в карте сообщений и с именем функции-обработчика этого сообщения.

10. Какие 4 фрагмента кода надо написать и куда их включить для создания собственного обработчика сообщения нового класса-потомка CWnd?

11. Назовите 3 способа включения трассировки программы.

12. Назовите 2 способа изменения состояния окон из стыковочного в плавающее и обратно.

 

Задание №3.

Создать остов приложения с многодокументным интерфейсом, выполнив действия 2-го задания со следующими изменениями:

1. На первом шаге в поле Project name задать имя проекта - MDI (Multiple Document Interfase)(см. пункт 2).

2. В пункте 6 выбрать интерфейс приложения Multiple Documents.

3. Оценить изменения в составе файлов проекта.

 

Задание №4.

Просмотреть все классы, методы и переменные созданных приложений, выполнив следующие действия:

1. Закрыть текущую рабочую область с помощью команды File/ Close Workspace.

2. Открыть требуемый проект при помощи команды File/ Open Workspace с последующей установкой пути доступа к файлу 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 Member Variable (добавить переменную) и Add Member Function (добавить метод). Используя эти команды, добавить переменные и функции для выбранного класса, посмотреть их в файлах *.h и *.cpp, а затем удалить их из класса.

11.Сделать добавление этих переменных и функций непосредственно в файлах *.h и *.cpp и убедиться, что появляются в дереве классов проекта.

Задание №5.

Просмотреть ресурсы проекта, выполнив следующие действия:

1. Открыть в окне проекта папку с ресурсами.

2. Открыть папку ресурсов.

3. Выбрать требуемый ресурс и дважды щелкнуть по имени ресурса, что вызывает соответствующий редактор ресурсов.

4. Произвести некоторые изменения в ресурсе, а затем восстановить ресурс в исходное состояние.

5. С помощью команды Insert в главном или контекстном меню добавить, а затем удалить какой-либо ресурс. Контекстное меню вызывается щелчком правой кнопки мыши по имени ресурса.

Задание №6.

Просмотреть все файлы проекта, выполнив следующие действия:

1. Открыть в окне проекта папку с файлами.

2. Открыть папку файлов.

3. Выбрать требуемый файл, дважды щелкнуть левой клавишей и выполнить редактирование, а затем его отменить.

4. Выбрать новый файл и нажать правую клавишу, что открывает контекстное меню соследующими командами:

• Open - открывает любой другой файл;

• Settings - позволяет изменить установки отладчика, компилятора и других инструментальных
средств;

• Properties - позволяет просмотреть все объектные, исполняемые и другие файлы, которые компилятор строит из исходного, а также все подключаемые файлы.

 

 

Досайбек М. И.

Задание №7.

Познакомиться с электронной документацией среды Visual C++, выполнив следующие действия:

1. Открыть перечень книг документов Visual C+_+.Открывая поочередно все книги, построить полное дерево документации, в котором не раскрываемыми узлами являются темы.Выбрать тему и дважды щелкнуть по ней, что приводит к выводу темы в окно просмотра.Найти тему с описанием интерфейсов приложений и познакомиться с ней.Внимательно изучить структуру электронной документации и убедиться в её наличии.Синхронизировать окно просмотра темы с окном просмотра структуры документации, нажав клавиши Ctrl+S или щелкнув по левой кнопки панели инструментов
категории Help. Синхронизация пзволяет узнать, к какой книге относится просматриваемая тема.

2. Сделать несколько переходов по темам, используя точки перехода или листая темы вперед и назад, при этом наблюдать за переходами по книгам в окне со структурой документации.

3. Найти информацию по индексу ключевому термину, выполнив команду Search в меню Help или контекстном меню (Ctrl+F) и задав ключевой термин. При удачном поиске выдается список тем и книг, в которые входит этот термин, при неудачном - ближайший контекст, который позволит уточнить термин.

4. Получить синтаксическую, контекстную справку для выбранного элемента программы установив курсор на этом элементе в окне просмотра документации и нажав на клавишу F1.

5. Получить контекстную справку по выбранному термину темы, выделив этот термин и нажав клавишу F1.

6. Создать новый файл в каталоге проекта и используя буфер обмена, перенести в этот файл несколько тем, а затем перевести текст файла на русский язык, запустив переводчик с английского языка.

7. Распечатать необходимые темы, используя команду Print Topic контекстного меню или команду Print меню File.

8. Сделать закладки в электронной документации для изучаемых тем, используя кнопки категории Help.

9. Найти необходимые сведения по запросу, выполнив команду Search/ Guery и задав запрос в виде одной строки или нескольких строк в апострофах, соединенных логическими связками And и Or.

10.Используя кнопки категории Help, познакомиться со списком открывавшихся при работе тем, которые сохраняются в History List, а также с результатом последнего запроса в Guery Results.

11.Уменьшить область поиска, установив подмножество книг поиска с помощью команды Help/ Define Subset.

12. Создать небольшой русскоязычный справочник и проверить возможность получения оригинальной справки на английском языке.

Задание №8.

Скомпилировать и запустить на исполнение полученные основы приложений, выполнив следующие действия:

1. Открыть требуемый проект: DBI.dsw, SDI.dsw или MDI.dsw.

2. На панели инструментов справа установить вид сборки проекта - Win32 Release (коммерческий или производственный режим). Установить вид сборки можно либо командой Project/ Settings окно Settings For или командой Build/ Set Active Configuration.

3. Создать исполняемый файл проекта, выполнив команду Build/ Build DBI (exe) и проследив за процессом создания файла, состоящим из нескольких этапов.

4. Оценить размеры исполняемого файла DBI.exe и выяснить, какие файлы получены в результате сборки проекта.

5. Запустить остов приложения DBI.exe на исполнение с помощью команды Build/ Execute DBI.exe.

6. Изучить функциональное поведение остова приложения DBI.

7. Повторить все выше перечисленные действия для остова SDI, а затем и для остова MDI. Отметить разницу в их поведении.

Задание №9.

Скомпилировать все полученные остовы приложений для отладочного режима и произвести их трассировку, выполнив следующие действия:

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 (F1 1) - пошаговая отладка с пошаговым выполнением функций;

• Step Over (F10) - пошаговая отладка с пошаговым выполнением функций за один шаг;

• Step Out (Shift+F1 1) - выход из функции за один шаг;

• Run to Cursor (Ctrl+F10) - выполнение до точки заданной курсором;

• Guick Watch (Shift+F9) - непосредственное вычисление значений переменных и выражений;

8. Для отладочного и для рабочего режимов, сравните значения следующих параметров: Sourse code debugging, MFS diagnostic macros, Library linkage и Compiler opzimization.

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 и при его отсутствии.

Контрольные вопросы:

1. Перечислите все типы проектов и укажите, какие из них ориентированы на использование
библиотеки MFC.

2. Укажите путь для каталога, в котором AppWizard по умолчанию создает каталоги проектов.

3. Перечислите подкаталоги, которые автоматически создает App Wizard в каталоге проекта.

4. Назовите платформу, используемую App Wizard по умолчанию.

5. Перечислите все типы интерфейсов приложений и укажите области их применения.

6. Какую опцию следует задать для включения диалогового окна с информацией о версии
приложения? Как изменить или дополнить это окно?

7. Как задать управляющим элементам приложения трехмерную форму?

 

 

Есболды Қ. С.

8. Как для приложения создать и включить справочный файл?

9. Как создать сервер или контроллер автоматизации?

10.Как создать сетевое приложение?

11.Перечислите типы создаваемых автоматически файлов проекта и укажите назначения файлов Readme.txt, StdAfx.h и StdApx.cpp.

12.Сколько шагов делает мастер AppWizard при создании остова приложения,

основанного на диалоге и остова приложения с одно- и многодокументным интерфейсом?

13.Перечислите функциональные кнопки панели инструментов, вставляемые опцией Docking toolbar. Как отключить эту панель при работе приложения?

14.Что отображается в строке состояния приложения и как она отключается?

15.Каким образом произвести просмотр всех потомков и всех родителей данного класса, всех вызываемых и вызывающих функций?

16.Перечислите все способы поиска информации в электронной документации Visual C++.

17.Перечислите этапы процесса создания исполняемого файла проекта.

18.Где и какие файлы создаются при компоновке проекта для производственного режима и для отладочного режима? Сравните размеры соответствующих файлов.

Задание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.Объясните возможности броузера классов и назовите условие, при котором его можно включить в работу.

Задание №1.

Создать приложения с одно-документным интерфейсом, реализующие диалог пользователя с компьютером, выполнив следующие действия:Создать остов приложения, основанного на одно-документном интерфейсе SDI, задав имя Scene и выбрав подходящий
каталог, при этом на этапе модификации созданных классов для класса Scene View заменить базовый класс С View на класс CFormView, что позволит в окне установить управляющие элемены.

1. Включить в файл 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. Включить в файл SceneDoc.h описание методов, изменяющих документ в результате действий, предпринимаемых персонами You и Computer соответственно:

//Operations

public:

CString YouChange(); //для изменения состояния You;

CString ComputerChange(BOOL *NameFlag); //для изменения состояния Computer;

4. В файле SceneDoc.cpp переопределить виртуальный метод инициализации документа:
BOOL CSceneDoc::OnNewDocument()

{if (!CDocument::OnNewDocument())

return FALSE;

ys=cs=NO_TALK;//-начальное состояние персон; return TRUE;

}

5. В конце файла Scene Doc.cpp добавить реализации новых методов YouChange() и ComputerChange(BOOL* NameFlag):

CString CSceneDoc::YouChange() { switch (ys)

{ case NO_TALK: ys=TALK;

return ("Привет компьютер!"); case TALK: ys=DOUBLE TALK;

return ("Компьютер,проснись!"); case DOUBLE_TALK: cs=TALK;

return ("Поздоровайся,наконец!");

} return ("");

}

CString CSceneDoc::ComputerChange(BOOL *NameFlag) { *NameFlag= 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_Comp, окна редактирования IDC_EDYou и IDC_EDComp.

7. В файле CSceneView.h модифицировать класс CSceneView, добавив две переменные m_ye и m_ce для обмена данными с окнами редактирования IDC_EDYou и IDC_EDComp, а также два метода OnYou() и OnComp() для обработки сообщений BN_CLICKED от кнопок IDC_You и IDC_Comp.

8. В файле CSceneView.cpp добавить операторы для методов OnYou() и OnComp():

void CSceneView::OnYou() { CString Str;

Str=GetDocument()->YouChange();

m_ye. SetWindowText(Str);

void CSceneView::OnComp() { BOOL NameFlag; CString Str,Name; INT Pos;

Str=GetDocument()->ComputerChange(&NameFlag); If (NameFlag)

{m_ye.GetWindowText(Name); if(!Name.IsEmpty())

Str=Str.Left(Pos=Str.Find("люди"))+Name+Str.Mid(Pos+4);

} m_ce.SetWindowText(Str);

}

9. Скомпилировать приложение и проверить выполняемые им функции.

 

Контрольные вопросы:

1. Объяснить, каким образом производится создание документов и их обликов.

2. Перечислить классы библиотеки MFC, производные от классов CDocument и CView.

3. Объяснить назначение документных шаблонов и их структуру.

4. Сколько раз создается объект - документ при работе SDI-приложения?

5. Какими методами инициализируется объект - документ?

6. Объяснить взаимодействие главного окна - рамки, окна - рамки - документа и окна - облика.

7. Каково назначение метода Serialize?

8. Где хранится список обликов документа?

9. Как обеспечивается взаимосвязь документа и облика?

10.Как обеспечивается синхронизация работы обликов для одного и того же документа?

11.Какова роль документа в создаваемом приложении Scene?

12.Используя справочную систему Visual C++, подготовить и запомнить сведения о следующих методах: CsceneDocument:: GetDocument; CEdit:: SetWindowText; CEdit:: GetWindowText; CString:: Find; CString::Left; CString: Mid; CString::IsEmpty.

Қапбар М. А.

Задание №1.

Создать многодокументный текстовый редактор, выполнив следующие действия:

1. Создать остов приложения с именем Мdi, выбрав тип интерфейса Multiple Document и отменив установки Docking toolbar, Initial status bar, Printig and print preview, а на последнем этапе задав в качестве базового класса для CMdiView класс CEditView.

2. Откомпилировать проект и запустить полученное многодокументное приложение на исполнение, открыть несколько текстовых файлов или создать новые и проверить команды меню Edit, а также команды меню Windows.

Задание №2.

Создать многодокументный редактор-словарь переводчика, выполнив следующие действия:

1. Создать остов одно-документного приложения, выбрав тип интерфейса Single Document, задав имя проекта Dict и заменив базовый класс CView на CFormView для класса облика CDictView.

2. Выбрать построенный мастером AppWizard ресурс формы с идентификатором IDD_DICT_FORM.

3. Разместить в форме два окна для редактирования термина и его определения с идентификаторами соответственно IDC_Termin и IDC_Translate, задав при этом для второго окна свойство Multiline и отключив свойство Auto HScroll.

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:

CMapStringTo String m_Dict; //-имя словаря терминов.

12. Доопределить в класс CDictDoc специальный метод Serialize для сохранения и загрузки словаря из
файла, остов которого создан мастером AddWizard:

void CDictDoc::Serialize(CArchive& ar) { if(ar.IsStoring())

{}

else

{m_Dict.Serialize(ar);} //-новая строка для чтения/записи;

}

 

 

Куракбаева Н. С

 

13.Переопределить метод OnInitialUpdate, который автоматически вызывается при создании или открытки уже созданного документа:

void CDictView::OnInitialUpdate()
{ CFormView:: OnInitialUpdate ();//-для базового класса;
m_strLDict.ResetContent();//-список терминов очищается;
CString strKey, //-термин-ключ;

strValue; //-определение термина;

СМар StringTo String& map=GetDocument() ->m_Dict;
POSITION pos=map.GetStartPosition();
while(pos!=NULL) //-перепись словаря в список;

{map.GetNextAssoc(pos, strKey, strValue);
CString s=strKey+_T("<->")+strValue;
m_strLDict.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 CDictView::OnAddOrUpdate()
{ if(!UpdateData()) //-если данные прочитаны из окон с ошибкой;

return;

intnIndex=FindKeyInList(m_strTermin); if(nIndex!=LB_ERR) //-если термин найден, то;

m_strLDict.DeleteString(nIndex); //-удаление элемента для замены; CString s=m_strTermin+_T("<->")+m_strTranslate;

m_strLDict.SetCurSel(nIndex); //- выделить текущий эл5Емент по

индексу;m_strLDict.AddString(s); //-добавление нового термина;GetDocument()-

>m_Dict[m_strTermin]=m_strTranslate;UpdateData(FALSE);GetDocument()->SetModifiedFlag(); //-
словарь изменен;}Включить в класс CDictView обработчик сообщения от кнопки «Найти»:void
CDictView::OnFind() {if(!UpdateData()) //-если данные не поступили из

окон:return;if(GetDocument()->m_Dict.Lookup(m_strTermin,_strTranslate)!=TRUE)

m_strTranslate=":-В словере нет термина"+m_strTermin; else

FindKeyInList(m_strTermin); UpdateData(FALSE);

}

15.Включить в класс CDictView обработчик сообщения от кнопки «Удалить»:
void CDictView::OnDel()
{if(!UpdateData()) //-если термин не введен, то;

return; if(GetDocument()->m_Dict.Lookup(m_strTermin,m_strTranslate)!=TRUE)

m_strTranslate=":-В словере нет удаляемого термина"+m_strTermin; else

{intnIndex=FindKeyInList(m_strTermin);

m_strLDict. Delete String(nIndex);

GetDocument()->m_Dict.RemoveKey(m_strTermin);} UpdateData(FALSE); GetDocument()->SetModifiedFlag();

}

16.Добавить в класс CDictView вспомогательную функцию поиска термина в списке: int CDictView::FindKeyInList(CString& strKey) { C String strValue;

if(GetDocument()->m_Dict.Lookup(strKey,strValue)! =TRUE) return LB ERR;

CString s=strKey+"<->"+strValue;

int Index=-1;

CString s1=_T("");

do

{

Index=m_strLDict.FindStringExact(Index,s); m_strLDict.GetText(Index,s 1); if(s==s1) break;

}

while(TRUE);

m_strLDict.SetTopIndex(Index); //-установить элемент вверху;

m_strLDict.SetCurSel(Index); //- выделить текущий элемент;

return Index;

}

18.Скомпилировать проект Dict и проверить его работоспособность.

19.Включить классы CDictDoc и CDictView проекта Dict в галерею компонентов с помощью команды Add to Component Gallary контекстного меню окна просмотра классов.

20.Открыть проект Mdi и с помощью команды Project/ Add to Project/ Components and Controls из папки Gallary вставить в него классы CDictDoc и CDictView.

21. До полнить метод InitInstance() класса CMdiApp фрагментом кода, обеспечивающим включение документного шаблона для создания объектов новых классов:

CMultiDocTemplate* pDictDocTemplate; //- в файл Мdi.cpp;

pDictDocTemplate = 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. Определить идентификатор IDR_DICTTYPE с помощью команды View/ Resource Symbols/ New, введя в поле Name IDR_DICTTYPE, а в поле Value число - значение идентификатора, которое должно быть больше значений идентификаторов IDR_MAINFRAME и IDR_MDITYPE.

Для идентификатора ресурса IDR_DICTTYPE в окне Workspace выбрать вкладку Resource View. Для ресурса String Table с помощью контекстного меню установить свойство Language (язык) в значение Russian. Затем для String Table двойной 1Еелчок для вызова таблицы строк, с помощью контекстного меню (правая кнопка мыши) вызвать команду New String/ String Properties и задать в поле ID идентификатор IDR_DICTTYPE, а в поле Caption следующую строку:\nDictDoc\nСловарь\nФайл типа словарь (*.dic)\n.dic\nMDIDictionary\nСловарь приложения Mdi.В общем случае структура строки такова:<windows Title>\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> - имя типа документа для хранения в системном реестре.

24. Для идентификатора ресурса IDR_MDITYPE аналогичным образом зададим следующую строку:

\nTextDoc\nТекстовый документ\nФайл типа текстовый документ(*.tek)\n.tek\n

MdiTextDocument\nТе кстовый документ приложения Mdi.

25.Создать меню для идентификатора IDR_DICTTYPE из вкладки Resource View ресурс Menu вызвать команду Insert Copy контекстного меню для IDR_МDITYPE., установить язык ресурса Russian, затем с помощью щелчка правой кнопки мыши и команды Properties заменив IDR_МDITYPE на IDR DICTTYPE.

26.Создать для IDR_DICTTYPE таблицу ускорителей, открыв таблицу ускорителей элемент Accelerator вкладки Resource View. С помощью команды Insert Accelerator создать новый ускоритель IDR ACCELERATOR1 и установить идентификатор IDR_DICTTYPE.

27.Создать для IDR_DICTTYPE иконку как копию значка IDR_МDITYPE. Выбрать во вкладке Resource View ресурс Icon. В контекстном меню для IDR_МDITYPE выбрать команду Insert Copy, заменить идентификатор ресурса на IDR_DIСТTYPE, а затем с помощью редактора ресурсов отредактировать копию значка по своему усмотрению (включив в него надпись "СЛОВАРЬ").

28. Для обеспечения регистрации типов используемых в приложении документов дополнить метод СMdiApp::InitInstance() следующими операторами, обеспечивающими запись необходимой информации в системном реестре Windows:

EnableShellOpen();

RegisterShellFileTypes(TRUE);

30.Скомпилировать проект Mdi, создать текстовый файл и словарь, сохранить их, а затем открыть в нескольких окнах и убедиться в работоспособности текстового редактора и словаря во всех открытых окнах.

Қурманқожа Е. Ж

Задание №3.

Модифицировать текстовый редактор-словарь, включив в него средства взаимодействия между документами, которые обеспечивали бы следующие возможности:

а) быстрое копирование фрагментов текста из одного окна в другое;

б) нахождение определения термина, указан=Еого курсором в тексте;в) вставка термина в любое место любого текстового документа, а также и его определения;г) наличие нескольких словарей по темам;д) представление пользователю списков открытых текстовых документов и словарей.

 

Контрольные вопросы:

1. Перечислите отличия многодокументного интерфейса от одно-
документного интерфейса.Укажите недостатки многодокументных приложений, создаваемых мастером АррWizard.Каково назначение документного шблона?

2. Где и каким образом создается документный шаблон?

3. Где создаются документы и облики при выполнении команд New и Open?

4. Опишите порядок создания интерфейса для приложения-словаря переводчика.

5. Перечислите этапы для реализации динамического обмена данными для окон редактирования.

6. Каково назначение класса CMapStringToString и каковы его основные методы?

7. Для каких целей используется метод Serialize()?

8. Опишите этапы создания словаря переводчика.

9. Как реализованы обработчики сообщений от командных кнопок приложения Dict?

10. Перечислите дополнения, которые необходимо сделать в методе InitInstance() для включения новых типов документов?

11. Как создаются ресурсы строк, меню и пиктограмм?

12. Каково назначение таблицы ускорителей для многодокументного интерфейса?

13. Опишите процедуру регистрации типов документов в системном реестре Windows?

Задание №1.

Создать приложение, в окне которого при запуске вычерчивается эллипс, выполнив следующие действия:

1. Создать остов приложения с одно-документным интерфейсом, задав для проекта имя Ellipse и выбрав для него необходимый рабочий каталог.

2. В остов метода OnDraw остова класса CEllipseView, реализация методов которого определяется в файле Ellipse View. срр, вставить оператор рисования эллипса:

void CEllipseView::OnDraw(CDC* pDC)

{

CEllipseDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);

pDC->Ellipse(20,20,150,200);

}

3. Скомпилировать проект и проверить работу приложения, учитывая что объект СEllipseView получает сообщение OnDraw в момент создания окна, а также всякий раз при повреждении окна.

Задание №2.

Создать приложение, которое в рабочем окне строит координатную сетку, а затем в ячейках этой сетки строит геометрические фигуры из следующего набора: прямоугольник, эллипс, скругленный прямоугольник, сегмент эллипса, сектор эллипса, замкнутый многоугольник, составной замкнутый многоугольник. Для выполнения задания использовать следующие методы класса CDC:

COLORREF GetPixel(int x, int y) const;

COLORREF GetPixel(POINT point) const;

COLORREF SetPixel(int x, int y, COLORREF crColor);

COLORREF SetPixel(POINT point, COLORREF crColor);

virtual CGdiObject* SelectStockObject(int nIndex);

CPen* SelectObject(CPen* pPen);

CBrush* SelectObject(CBrush* pBrush);

CGdiObject* SelectObject(CGdiObject* pObject);

BOOL Chord(int x1, int y 1, int x2, int y2, int x3, int y3,int x4, int y4);

BOOL Chord(LPCRECT lpRect, POINT ptStart, POINT ptEnd);

BOOL Ellipse(int x1, int y1, int x2, int y2);

BOOL Ellipse(LPCRECT lpRect);

BOOL Rectangle(int x1, int y 1, int x2, int y2);

BOOL Rectangle(LPCRECT lpRect);

BOOL RoundRect(int x1, int y1, int x2, int y2, int x3, int y3);

BOOL RoundRect(LPCRECT lpRect, POINT point);

CPoint MoveTo(int x, int y);

CPoint MoveTo(POINT point);

BOOL LineTo(int x, int y);

BOOL LineTo(POINT point);

Задание №3.

Создать приложение, обеспечивающее изменение размеров эллипса с помощью команды меню Increase Ellipse, выполнив следующие действия:

1. Создать остов приложения с одно-документным интерфейсом, задав для проекта имя Ellipse и выбрав для него необходимый рабочий каталог.

2. В файле EllipseDoc.h доопределить класс СEllipseDoc:

//Attributes

public:

CRect m_rectEllipse; //-прямоугольник для эллипса;

//Operations public:

CRect EllipseDisc() {return m_rectEllipse;}

3. В файле EllipseDoc.cpp доопределить метод OnNewDocument: BOOL CEllipseDoc::OnNewDocument()

if (! CDocument:: OnNewDocument())

return FALSE;

m_rectEllipse=CRect(20,20,200,100); //-начальное значение; return TRUE;

}

4. Переопределить метод OnDraw в файле CEllipseView.cpp:

void CEllipseView::OnDraw(CDC* pDC)

{

CEllipseDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

pDC->Ellipse(pDoc->EllipseDisc());

}

 

Құрбан Е. Н.

5. Добавить в меню Edit элемент Increase Ellipse с помощью редактора ресурсов.

С помощью мастера ClassWizard создать остов метода OnEditIncreaseEllipse обработчики сообщения COMMAND от нового элемента меню и дополнить его необходимыми onepar>EpaMH:void CEllipseDoc::OnEditIncreaseEllipse() {m_rectEllipse+=CRect(0,0,10,10); //-увеличение размеров;UpdateAllViews(NULL); //-посылка сообщения Update облику // для выработки сообщения OnDraw.}Скомпилировать проект и проверить работу приложения, учитывая что объект класса CЕllipseView получает сообщение OnDraw в момент создания окна, а также всякий раз при изменении размеров эллипса.Задание №4. Создать приложение, демонстрирующее применение следующих методов класса CWnd:GetUpdateRect; GetUpdateRn;

Invalidate; InvalidateRect; InvalidateRgn;

ValidateRect; ValidateRgn.

Контрольные вопросы:

1. Назвать основные функции GDI системы Windows.

2. Чем отличается контекст устройства системы Windows и контек


Поделиться с друзьями:

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.293 с.