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

 

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

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

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

(0x80, Oxfc, 0x0, OxcO, 0xf6, 0xa8, 0x3b, 0x7f } };
Второй параметр является указателем на шаблон документа. Присваивание значения true третьему параметру означает, что при вызове внедренного объекта контейнером сервера для редактирования каждый раз запускается новый экземпляр сервера. В SDI-приложениях необходимо передавать значение true, поскольку они одновременно могут управлять только одним документом. Всегда при запуске программы ServDemo (как автономной программы или как сервера OLE) запускается ее новый экземпляр. Таким образом, несколько копий программы выполняются одновременно.
При выбранной опции Full-server мастер AppWizard вызывает функции EnableShellOpen и RegisterShellFileTypes (см. параграф "Регистрация типа файла" гл. 12).
// Сделайте доступным открытие исполняемого DDE EnableShellOpen(); RegisterShellFileTypes();
Если программа ServDemo запускается как OLE-сервер, то в тексте программы, сгенерированном мастером AppWizard, вызов статической функции COleTemplateServer: :RegisterAll регистрирует сервер с библиотеками OLE, что необходимо для редактирования внедренного компонента.
// Проверьте, запущен ли сервер OLE
if (cmdInfo.m_bRunErabedded I I cradlnfо.m_bRunAutomated) {
// Регистрируйте все серверы OLE как исполняемые. // Это делает библиотеки OLE доступными для // создания объектов из других приложений COleTemplateServer::RegisterAll();
// Приложение было запущено как сервер OLE (с заданием
// параметров /Embedding или /Automation в командной строке)
//В этом случае не показывайте главное окно
return TRUE;
1
Если программа ServDemo запущена как сервер OLE, то шаблон сервера и библиотеки OLE автоматически создают документ для обработки внедренных данных. В этом случае функция initinstance завершается без вызова обычной функции создания или открытия документа ProcessShellCommand, предназначенной для выполнения программы как автономного приложения.
Следующее добавленное СВОЙСТВО — это вызов COleTemplateServer: : Upda-teRegistry.
// При автономном запуске приложения-сервера восстановите // системный реестр, так как он мог быть поврежден m_server.UpdateRegistry(OAT_INPLACE_SERVER);
Эта функция вызывает регистрацию сервера в системном реестре Windows. При регистрации сервер вводит в системный реестр информацию о программе и типе внедренного компонента, который он поддерживает. Сервер должен быть зарегистрирован перед использованием для создания внедренного компонента одним из следующих способов:
• Запустите программу-сервер как автономную программу для вызова функции UpdateRegistry.
• В программе Windows Explorer выполните двойной щелчок на файле ServDemo.reg, размещенном в каталоге проекта. Этот файл создается мастером AppWizard и содержит информацию для регистрации программы ServDemo. Двойной щелчок на имени файла запускает программу Windows Registry Editor (RegEdit.exe), которая вводит эту информацию в системный реестр.
Хотя сервер регистрируется только один раз, программа ServDemo при автономном выполнении регистрируется каждый раз при удалении системного реестра или изменении пути к каталогу с исполняемым файлом программы.
Последнее изменение функции Initinstance, которое мастер AppWizard делает при выборе опции Full-server (не относящееся к OLE), следующее: Initinstance вызывает функцию CWnd::DragAcceptFiles, чтобы сделать
доступным открытие файла с помощью метода "перетащить-и-отпустить" (см. параграф "Поддержка технологии "drag-and-drop" гл. 12).
Класс документа
Класс документа CServDemoDoc порождается от MFC-класса COleServerDoc, а не от CDocument. Класс COleServerDoc предоставляет не только обычные средства для управления документом при автономном выполнении программы, но и средства для управления документом при выполнении программы как сервера OLE при создании или редактировании внедренного компонента OLE (в этом случае документ содержит данные компонента).
Кроме того, класс документа переопределяет виртуальную функцию COleServerDoc: : OnGetEmbeddeditem, вызываемую при запуске программы как сервера OLE. Функция создает объект класса CServDemoSrvrltem, который будет рассмотрен в следующем параграфе.
COleServerItem* CServDemoDoc::OnGetEmbeddeditem() {
// OnGetEmbeddeditem вызывается структурой для получения // метода COleServerltem, связанного с документом. // Вызывается только при необходимости
CServDemoSrvrltem* pltem = new CServDemoSrvrltem(this); ftSSERT_VALID (pltem) ; return pltem;
}
Класс компонента сервера
При выборе опции Full-server мастер AppWizard создает новый класс CServDemoSrvrltem, наследуемый от MFC-класса COleServerltem. Новый класс предоставляет дополнительные средства обработки документа при выполнении программы как сервера OLE, предназначенные для создания и редактирования внедренного компонента. Как показано в предыдущем параграфе, в этом случае вызывается функция CServDemoDoc: :OnGetEmbeddeditem, создающая объект класса CServDemoSrvrltem, связанный с объектом документа. Объект класса определен и реализован в собственном наборе файлов — Srvrltem.h и Srvrltem.cpp.
Предыдущая << 1 .. 135 136 137 138 139 140 < 141 > 142 143 144 145 146 147 .. 173 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100