Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
otvety_po_OAiPR.doc
Скачиваний:
3
Добавлен:
01.03.2025
Размер:
1.23 Mб
Скачать

222. У всех Windows-приложений фиксированная структура, определяемая функцией WinMain. Структура приложения, построенного из объектов классов библиотеки mfc, является еще более определенной.

Приложение состоит из объекта theApp, функции WinMain, и некоторого количества других объектов. Сердцевина приложения - объект theApp - отвечает за создание всех остальных объектов и обработку очереди сообщений. Объект theApp является глобальным и создается еще до начала работы функции WinMain. Работа функции WinMain заключается в последовательном вызове двух методов объекта theApp: InitInstance и Run. В терминах сообщений можно сказать, WinMain посылает объекту theApp сообщение InitInstance, которое приводит в действие метод InitInstance.

Получив сообщение InitInstance, theApp создает внутренние объекты приложения. Процесс создания выглядит как последовательное порождение одних объектов другими. Набор объектов, порождаемых в начале этой цепочки, определен структурой MFC практически однозначно - это главная рамка, шаблон, документ, облик. Их роли в работе приложения будут обсуждаться позже.

Следующее сообщение, получаемое theApp, - Run - приводит в действие метод Run. Оно как бы говорит объекту: "Начинай работу, начинай процесс обработки сообщений из внешнего мира". Объект theApp циклически выбирает сообщения из очереди и инициирует обработку сообщений объектами приложения.

Некоторые объекты имеют графический образ на экране, с которым может взаимодействовать пользователь. Эти интерфейсные объекты обычно связаны с Windows-окном. Среди них особенно важны главная рамка и облик. Именно им объект прежде всего распределяет сообщения из очереди через механизм Windows-окон и функцию Dispatch.

Когда пользователь выбирает команду меню окна главной рамки, то возникают командные сообщения. Они отправляются сначала объектом theApp объекту главная рамка, а затем обходят по специальному маршруту целый ряд объектов, среди которых первыми являются документ и облик, информируя их о пришедшей от пользователя команде.

При работе приложения возникают и обычные вызовы одними объектами методов других объектов. В объектно-ориентированной терминологии такие вызовы могут называться сообщениями. В Visual C++ некоторым методам приписан именно этот статус (например, методу OnDraw).

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

223. При разработке программы использовались перечисленные ниже объекты и их методы.

Для создания объекта модального блока диалога использовалась специальная функция virtual int CDialog::DoModal (), которая создает и активизирует модальный блок диалога Windows, осуществляет полное взаимодействие с пользователем и удаляет блок диалога после завершения работы, возвращая целое значение типа IDOK или IDCANCEL, позволяющее определить конечный результат его работы. Если функция не смогла создать блок диалога, то она возвращает -1.

Для работы объектами данных, хранящих информацию об абитериентах, использовался класс библиотеки MFC CTypedPtrList, представляющий собой связанный список указателей на объекты произвольных типов.

Для получения позиции первого представления, хранящегося в списке представлений, ассоциированных с документом использовался метод GetFirstViewPosition() класса CTypedPtrList, для получения указателей на последующие представления в списке – метод GetNextView(pos).

void CDocument::UpdateAllViews () – информирует каждое представление, присоединенное к документу, за исключением изменившего документ, на которое указывает pSender, о том, что документ был изменен. Это приводит к вызову функции CView::OnUpdate для каждого представления и передачи им информацию об изменениях в документе. Эта информация может быть представлена каким-либо кодом и/или содержаться в объекте.

CDocument* CView::GetDocument () – позволяет получить указатель на/объект "документ", присоединенный к этому представлению. Если с ним не ассоциирован никакой документ, то возвращается NULL. Использование данного указателя предоставляет доступ к функциям соответствующего класса документа.

void CView::OnDraw (CDC *pDC) = 0 – функция, которая используется для изображения образа документа. Следует обязательно переопределить ее для изображения представления документа, что и сделано в производных классах. Библиотека MFC использует эту функцию как для печати (и предварительного просмотра) документа, так и для отображения его на экране. Это основная и единственная функция для изображения видимого образа документа. От того, каким образом она реализована, зависит, что увидит пользователь на экране или после печати на принтере.

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

Класс СРеn инкапсулирует графический объект Windows "карандаш". СРеп::CreatePen  () – создание карандаша.

Класс CFont инкапсулирует графический объект Windows "шрифт". BOOL CFont::CreateFontlndirect (const LOGFONT* IpLogFont) – функция для создания шрифта.

Основная функция установки графических объектов — SelectObject. В проекте использовались две функции:

– CPen* CDC::SelectObject (CPen* pPen);

– virtual CFont* CDC::SeiectObject (CFont* pFont.

Функции настройки режимов отображения:

SetMapMode () – устанавливает направления осей и определяет логические единицы, т. е. единицы измерения для задаваемой системы координат;

SetWindowOrg() — для настройки начала координат логической области вывода;

SetViewportOrg() — для настройки начата координат физической области вывода

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]