Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка_ППВиС_№7.doc
Скачиваний:
0
Добавлен:
14.04.2019
Размер:
225.79 Кб
Скачать

Основные классы каркаса

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

Соответствующая диаграмма классов представлена на рисунках 11, 13. Это класс ОКНО (производный от CFrameWnd), который служит базовым для создания интерфейса приложения, поддерживает масштабируемость, меню, панель инструментов и т.п. Класс ДОКУМЕНТ (производный от CDocument) обеспечивает хранение и редактирование данных, их сериализацию. Класс ВИД (производный от CView) управляет отображением данных.

На базе перечисленных выше пользовательских классов, обеспечивающих работу с документом, областью просмотра и главным окном создается шаблон документа (ШД), предназначенный для связывания всех перечисленных классов в единый каркас (рисунок 14).

При этом можно создавать шаблоны как составных (когда допустима одновременная работа как со многими экземплярами и обликами-видами документа так и с документами разного типа), так и единых документов (когда допустима работа только с одним документом), использующие MDI или SDI интерфейсы. Шаблон документа с SDI-интерфейсом является объектом класса CSingleDocTemplate.

В приложении за создание всех объектов и связывание их в виде шаблона документа (рисунки 14-15) отвечает объект класс ПРИЛОЖЕНИЕ (производный от CWinApp), который является производным в том числе и от класса CCmdTarget и наследует от него таблицу (карту) сообщений (Message Map) - набор макрокоманд, позволяющий сопоставить сообщения Windows и команды метода класса.

Как видно из рисунка 15 шаблон документа агрегирует классы ОКНО, ВИД, ДОКУМЕНТ. Создаваемые динамически соответствующие объекты используются приложением для обеспечения требуемой функциональности пользовательского приложения. Соответственно ПРИЛОЖЕНИЕ использует шаблон документа, в том числе, для подготовки приложения к работе.

Шаблон документа. Инициализация каркаса

Создание шаблона реализуется при создании объекта приложения путем запуска его метода InitInstance (см. рисунок 16), где и создается объект ШД. При этом используется конструктор

CSingleDocTemplate:: CSingleDocTernplate (UINT ID_Ресурсов_ШД,

CRuntimeClass * Документ, CRuntimeClass * Окно, CRuntimeClass *Вид) .

Здесь ID_Ресурсов_ШД - идентификатор ресурсов шаблона (меню, таблицы быстрого доступа, пиктограммы документа, а также строки настройки программы). Параметр Документ - указатель на класс документа, Окно - указатель на класс главного окна, Вид - указатель на класс области просмотра. Их получают с помощью макроса RUNTIME_CLASS, т.е. указанные классы предварительно должны быть объявлены динамическими.

Для создания пользовательского класса приложения в качестве базового используется класс MFC CWinApp. В пользовательском классе необходимо описать метод InitInstance ( virtual BOOL CWinApp:: InitInstance( ) ), вызываемый автоматически при запуске при­ложения и выполняющий роль конструктора и отвечающий за инициализацию приложения. Метод аналогичен используемому в ТКП, однако здесь при аналогичности общих действий он реализует иную, более сложную последовательность действий для создания ШД. Примерный текст метода приведен ниже

BOOL ПРИЛОЖЕНИЕ::InitInstance ( )

{

CSingleDocTemplate *УказательШД = new CSingleDocTemplate(ID_Ресурсов_ШД,

RUNTIME_CLASS( ДОКУМЕНТ ),

RUNTIME_CLASS( ОКНО ),

RUNTIME_CLASS( ВИД ) );

AddDocTemplate( УказательШД );

EnableShellOpen( );

RegisterShellFileTypes( );

CCommandLineInfo CLInfo;

ParseCommandLine( CLInfo );

if ( ! ProcessShellCommand ( CLInfo ) )

return FALSE;

// m_pMainWnd -> ShowWindow( SW_SHOW );

return TRUE;

} .

Здесь вначале создается УказательШД и сам ШД, конструируемый с помощью CSingleDocTemplate. Созданный шаблон документа, заданный указателем УказательШД, добавляется к списку шаблонов, поддерживаемых при­ложением, с помощью функции

void CWinApp:: AddDocTemplate (CDocTemplate *УказательШД).

Для обеспечения пользователю возможности запуска прило­жения по щелчку на одном из его документов вызывается функция EnableShellOpen

void CWinApp::EnableShellOpen( ) .

Для регистрации созданного типа документа в системной базе регистрации в соответствии с описанием ресурса-строки, заданной при создании шаблона документа, вызывается функция RegisterShellFileTypes

void CWinApp:: RegisterShellFileTypes( ) .

Далее выполняется обработка аргументов командной строки, которые можно задать при запуске Windows-приложения с помощью команды Run или из командной строки. В приложениях, построенных на основе ТКП ДВ, в командной строке обычно указывается имя документа, открываемого при запуске приложения. Информация из командной строки инкапсулируется в классе CCommandLinelnfо. Синтаксический разбор командной строки, оценка ее корректности и обработка реализуются методами (при этом, если метод возвращает ноль, то функция Initlnstance( ) должна вернуть значение FALSE)

CWinApp::ParseCommandLine( ) ,

CWinApp:: ProcessShellCommand ( ) .

Формат строки описания настроек представлен на рисунке 17. Здесь ЗО – заголовок окна; НД – название документа по умолчанию (при отсутствии в качестве первичного имени документа системой будет предлагаться ”Untitled”); ТД – тип документа (расширение), если приложение предусматривает работу с несколькими типами; ФФ - описание фильтра файлов, используемого в типовых окнах загрузки-сохранения документов (список "тип файлов"); РД – расширение файлов для документов данного типа; ИТСР – идентификатор типа файлов для базы системной регистрации; ИмТСР – имя типа файлов для базы системной регистрации. Указанные поля приводятся в одной строке в том же порядке. В качестве разделителя полей используется символ "новая строка" ('\n”'). Этот же символ замещает отсутствующее поле строки. Сам ресурс-строка описывается в файле ресурсов оператором STRINGTABLE как

STRINGTABLE

{

ID_Ресурсов_ШД "строка"

}

и может быть задан средствами редактора ресурсов. Здесь ID_Ресурсов_ШД - идентификатор строки (как правило, совпадающий с идентификатором ресурсов шаблона документа – меню и т.д.). Например, строка IDR_FRAMEWIN

Document-View\nDocName\nDocType\nDoc Type (*.dvi)\n.dvi\nDVTest\nDV Test ,