Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Янг Майкл Дж. -> "Visual С++ 6. Полное руководство: В 2 т.(том2)" -> 140

Visual С++ 6. Полное руководство: В 2 т.(том2) - Янг Майкл Дж.

Янг Майкл Дж. Visual С++ 6. Полное руководство: В 2 т.(том2) — Бином, 2006. — 530 c.
Скачать (прямая ссылка): vicualcc2006t2.djvu
Предыдущая << 1 .. 134 135 136 137 138 139 < 140 > 141 142 143 144 145 146 .. 173 >> Следующая

Для генерации программной оболочки, поддерживающей основные средства сервера, используется мастер AppWizard. Затем добавляется текст, реализующий средства рисования MiniDraw, а также дополнительные средства OLE. Позже будет создана простая программа-контейнер, которую можно использовать для проверки работы ServDemo.
Создание программы-сервера с помощью мастера AppWizard
Используйте мастер AppWizard для генерации текста программы, как описано в гл. 9. Назовите проект ServDemo, а в диалоговых окнах мастера AppWizard (Step 1 — Step 6) выберите те же опции, которые выбирали в гл. 9, кроме следующих.
• В диалоговом окне (Step 3) выберите опцию Full-server, отмените метку выбора опции ActiveX Control, а другие опции оставьте неизменными (рис. 24.1).
• В диалоговом окне (Step 4) щелкните на кнопке Advanced... и во вкладке Document Template Strings в поле File extension введите srv. Это задает стандартное расширение для файлов документов, сохраняемых в программе (см. гл. 12).
В диалоговом окне мастера (Step 3) при выборе опции Full-Server генерируется программа, которую можно запустить либо как автономное приложение (как во всех предыдущих примерах), либо как сервер OLE, поддерживающий внедренные и связанные компоненты (хотя связывание в программе ServDemo не реализовано). Сгенерированная программа выполняется только как сервер OLE, обрабатывающий внедренные элементы (автономно не выполняется, связывание не поддерживает). Опция Container генерирует программу-контейнер OLE и применяется при создании программы-контейнера ContDemo. Опция Both Container And Server создает программу, являющуюся и контейнером, и сервером OLE.
Примечание
В литературе по OLE блок встроенных или связанных данных OLE называют объектами. Однако в документации по библиотеке MFC и далее в этой главе используется термин компонент, чтобы отличать его от объектов С++ (в частности тех, которые управляют компонентами OLE).
После генерации исходных файлов программы ServDemo можно заметить, что выбор опции Full-server вносит некоторые изменения в классы и текст программы, сгенерированный мастером AppWizard. Мастер создает два новых класса: класс компонента сервера CServDemoSrvrltem и класс редактирования cinPlaceFrame,
а также вносит ряд дополнений и изменений в стандартные MFC-классы. Эти изменения необходимы для создания программы-сервера OLE и описаны в следующих параграфах.
MFC AppWizard - Step 3 ol 6
What compound document support would you like to -
include'?
<~ None C Container <~ Mini-server (* Full-server
<*" Both ccu-itainer and server V Active document server ff r .. ¦¦ r.<r- ¦ .t-Would you like support for compound files?
<• Yes, please
C No. thank you What other support would you like to include?
Г" Automation
:fiack j y/Ni
Next).
Finish
Cancel
Рис. 24.1. Окно мастера AppWizard при генерации программы ServDemo
Класс приложения
При генерации сервера OLE мастер AppWizard вносит дополнения в стандартную функцию Initinstance класса приложения. Во-первых, добавляет в ее начало вызов глобальной MFC-функции AfxOleinit:
if (!AfxOleinit ()) {
AfxMessageBox(IDP_OLE_INIT_FAILED); return FALSE;
}
Этот вызов позволяет инициализировать библиотеку MFC. Примечание
Мастер AppWizard включает файл Afxole.h в предварительно компилируемый файл заголовков StdAfx.h, содержащий определения MFC-классов.
После создания шаблона документа мастер AppWizard добавляет вызов функции
CSingleDocTemplate::SetServerInfо.
pDocTemplate->SetServerInfо (
Idr_SRVR_embeDDED, IDR_SRVR_in place, RUNTIME_class(CInPlaceFrame) ) ;
При этом определяются идентификаторы меню, отображаемого программой ServDemo при редактировании в режиме полного открытия (идентификатор idr_srvr_embedded), и меню, отображаемого при выполнении программы как сервера, применяемого для редактирования в режиме "in place" (идентификатор idr_srvr_inplace). Эти идентификаторы определяют соответствующие ресурсы комбинаций клавиш. (Упомянутые меню будут рассмотрены далее.) При вызове функции SetServerlnfo определяется класс управления окном, которое обрамляет компонент OLE при редактировании на месте (класс CInPlaceFrame, описанный ниже).
Мастер AppWizard определяет новую переменную класса приложения m_server, являющуюся экземпляром класса CdeTemplateServer и называемую объектом шаблона сервера. Этот объект при запуске программы как сервера OLE создает новый объект документа, используя информацию, хранящуюся в шаблоне документа. Мастер AppWizard добавляет вызов функции COleTemplateServer : : ConnectTemplate, которая предоставляет переменную mserver, содержащую адрес шаблона документа.
m_server.ConnectTemplate(clsid, pDocTemplate, TRUE);
В первом параметре метода ConnectTemplate задается идентификатор типа документа, поддерживаемого сервером. Мастер AppWizard генерирует для программы ServDemo следующий идентификатор.
// Данный идентификатор сгенерирован со статистически // уникальным значением. Можете его изменить, // чтобы выбрать специальный идентификатор
// {03A2EC83-ABBE-11D1-80FC-00C0F6A83B7F} static const clsid clsid = {0x3a2ec83, Oxabbe, Oxlldl,
Предыдущая << 1 .. 134 135 136 137 138 139 < 140 > 141 142 143 144 145 146 .. 173 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100