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

 

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

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

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

Функция CServDemoSrvrltem: :OnDraw вызывается, когда программа-ло/шей-нер отображает внедренный объект в окне представления. Контейнер используется для работы с компонентом OLE в своем окне представления, если компонент неактивен, т. е. не редактируется сервером. Контейнер отображает его в собственном окне при редактировании в окне сервера в режиме полного открытия. Вспомните: при редактировании в режиме полного открытия компонент виден в обоих окнах: и сервера, и контейнера. Вместо отображения в окне контейнера функция CServDemoSrvrltem::OnDraw генерирует метафайл, хранящий команды, необходимые для отображения компонента. Этот файл проигрывается в окне представления контейнера. {Метафайл хранит текст и графику, записывая команды, которые выполнялись при их создании. При проигрывании метафайла эти команды выполняются, и выводимая информация отображается на указанном устройстве.) Мастер AppWizard реализует функцию CServDemoSrvrltem: : OnDraw частично. Далее будет добавлен специальный текст приложения.
Функция класса представления вызывается для отображения документа в окне представления при автономном выполнении программы. Функция OnDraw класса представления вызывается, когда серверу нужно отобразить внедренный компонент в своем окне представления, т.е. когда компонент активен (редактируется в любом режиме). Заметьте: при запуске сервера для редактирования компонента OLE сервер создает объект представления для отображения компонента, а также объекты приложения, документа и обрамляющего окна. Коды для отображения данных этих двух функций OnDraw на первый взгляд достаточно похожи (ниже мы рассмотрим некоторые их отличия).
Функция CServDemoSrvrltem: :OnGetExtent возвращает размер внедренного компонента OLE, когда программа-контейнер запрашивает размер. Мастер AppWizard генерирует стандартную реализацию этой функции, которая просто возвращает закодированный размер (3000 на 3000 единиц himetric; единица himetric равна 0,01 миллиметра).
Класс окна редактирования на месте
Мастер AppWizard создает также класс cinPlaceFrame, наследуемый от MFC-класса coieiPFrameWnd. Когда программа ServDemo выполняется как автономная или как сервер в режиме полного открытия, окно представления совпадает со стандартным главным окном, управляемым, как обычно, классом CFrameWnd главного окна. Если же программа ServDemo выполняется как сервер в режиме редактирования "на месте", то окно представления ограничивается специальным обрамляющим окном редактирования, управляемым экземпляром класса CinPlaceFrame, который определен и реализован в файлах IpFrame.h и IpFrame.cpp.
Мастер AppWizard определяет в классе CinPlaceFrame переменную m_wndResizeBar, являющуюся экземпляром MFC-класса COleResizeBar. AppWizard реализует функцию CinPlaceFrame: :OnCreate, которая, в свою очередь, вызывает функцию Create для объекта m_wndResizeBar, чтобы задать границу обрамляющего окна редактирования "на месте". При этом отображаются маркеры изменения размера, перетаскиваемые при изменении размера внедренного компонента.
Обрамляющее окно редактирования "на месте" отображается только при редактировании внедренного компонента сервером. Программа-контейнер обычно отображает собственную границу вокруг выбранного неактивного внедренного компонента. Эта граница имеет маркеры изменения размера, позволяющие пользователю изменять размер компонента. Однако простая программа-контейнер, которую вы создадите позже, такую границу не отображает и не позволяет изменять размер неактивного компонента.
Класс представления
В класс представления программы ServDemo мастер AppWizard добавляет функцию OnCancelEditSrvr, которая получает управление после нажатия клавиши Esc при редактировании внедренного компонента OLE в режиме "на месте". Она вызывает функцию COleServerDoc: :OnDeactivateUl, завершающую сеанс редактирования в этом режиме.
// Следующий обработчик команды предоставляет пользователю
// стандартный интерфейс клавиатуры, используемый для завершения
// сеанса редактирования на месте.
// Здесь сервер (не контейнер) вызывает деактивацию
void CServDemoView::OnCancelEditSrvr() {
GetDocument()->OnDeactivateUI(FALSE);
)
Клавиша Esc определена с идентификатором id_cansel_edit_srvr в таблице, загружаемой при редактировании "на месте", т.е. в таблице акселераторов idr_SRVR_INPLACE. Мастер AppWizard добавляет функцию OnCancelEditSrvr в схему сообщений для ее вызова в ответ на использование акселератора. Это пример акселератора, который не связан с командой меню.
Ресурсы
Мастер AppWizard включает файл Afxolesv.rc в файл ресурсов программы. Файл Afxolesv.rc определяет несколько ресурсов, используемых MFC-классами сервера OLE.
Мастер AppWizard определяет отдельное меню и соответствующую таблицу акселераторов для каждого из трех режимов, в которых может выполняться программа ServDemo. Меню и таблица акселераторов idr_MAINFRAME используются при выполнении программы в автономном режиме; меню и таблица акселераторов Idr_srvr_embedded — при выполнении программы как сервера OLE для редактирования в режиме полного открытия; наконец, меню и таблица акселераторов IDR_SRVR_INPLACE - при выполнении программы как сервера OLE в режиме редактирования "на месте". Ниже каждое из этих меню будет изменено, и вы узнаете о назначении его различных пунктов.
Предыдущая << 1 .. 136 137 138 139 140 141 < 142 > 143 144 145 146 147 148 .. 173 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100