Серверы. Реализация окна фрейма В- Размещения
В этой статье описывается, что необходимо сделать для реализации фрейма окна визуального редактирования на месте в серверном приложении, если не используется мастер приложений для создания ваше приложение сервера.Вместо поиска процедуры конспектированной в этой статье, можно использовать существующий класс кадр-окна на месте из приложения мастер-произвели приложение или образцы, предоставленную с Visual C++.
Объявления класса кадр-окна на месте
Создайте класс, кадр-окна на месте из COleIPFrameWnd.
Используйте макрос DECLARE_DYNCREATE в файле заголовка класса.
Используйте макрос IMPLEMENT_DYNCREATE в файле реализации класса (.cpp).Это позволяет объектам этого класса для создания границы.
Объявите член COleResizeBar в классе кадр-окна.Это необходимо, если требуется поддержка на месте изменения размеров в серверных приложениях.
Объявите обработчик сообщений OnCreate (с помощью окна Свойства ) и вызовите Создать для элемента COleResizeBar, если вы определили его.
Если имеется панель инструментов, объявите член CToolBar в классе кадр-окна.
Переопределить функцию-член OnCreateControlBars чтобы создать панель инструментов, когда сервер активна на месте.Примеры.
BOOL CInPlaceFrame::OnCreateControlBars(CFrameWnd* pWndFrame, CFrameWnd* pWndDoc) { UNREFERENCED_PARAMETER(pWndDoc); // Set owner to this window, so messages are delivered to correct app m_wndToolBar.SetOwner(this); // Create toolbar on client's frame window if (!m_wndToolBar.CreateEx(pWndFrame, TBSTYLE_FLAT,WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_SRVR_INPLACE)) { TRACE0("Failed to create toolbar\n"); return FALSE; } // TODO: Delete these three lines if you don't want the toolbar to be dockable m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); pWndFrame->EnableDocking(CBRS_ALIGN_ANY); pWndFrame->DockControlBar(&m_wndToolBar); return TRUE; }
См. обсуждение этого кода после шага 5.
Включите файл заголовка для этого класса в основном кадр-окна на месте в cpp-файле.
В InitInstance для класса приложения, вызовите функцию SetServerInfo объекта шаблона документа, чтобы определить ресурсы и окно фрейма на месте, используемый в открыть и редактирования на месте.
Последовательность вызовов функций в выписке if создает панель инструментов из ресурсов сервера, обеспечившего.На этом этапе панель инструментов окна являются частью иерархии контейнера.Поскольку эта панель инструментов является производной от CToolBar, он передает свои сообщения в родительском фрейме окна контейнерного приложения, владелец, если не изменить владельца.Именно поэтому вызов SetOwner требуется.Этот вызов изменяет окно, в котором отправлены команды быть окном кадра на месте сервера, что сообщения для передачи на сервер.Это позволяет серверу реагировать на операции на панели инструментов, которую он содержит.
Идентификатор для растрового изображения панели инструментов должно быть таким же, как и остальные ресурсы на месте, определенные в серверном приложении.Дополнительные сведения см. в разделе Меню и ресурсы. Добавление сервера.
Дополнительные сведения см. в разделе COleIPFrameWnd, COleResizeBar и CDocTemplate::SetServerInfo в ссылке библиотеки классов.