Серверы. Реализация окон фрейма на месте
В этой статье объясняется, что необходимо сделать для реализации окон фреймов на месте в приложении сервера визуального редактирования, если вы не используете мастер приложений для создания серверного приложения. Вместо выполнения процедуры, описанной в этой статье, можно использовать существующий класс окна фрейма на месте из созданного мастера приложения или примера, предоставленного Visual C++.
Объявление класса окна фрейма на месте
Наследуйте класс окна фрейма на месте.
COleIPFrameWnd
Используйте макрос DECLARE_DYNCREATE в файле заголовка класса.
Используйте макрос IMPLEMENT_DYNCREATE в файле реализации класса (CPP). Это позволяет создавать объекты этого класса платформой.
Объявите
COleResizeBar
элемент в классе frame-window. Это необходимо для поддержки изменения размера на месте в серверных приложениях.Объявите
OnCreate
обработчик сообщений (с помощью мастера классов) и вызовитеCreate
участника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 в справочнике по библиотеке классов.
См. также
Серверы
Серверы. Реализация сервера
Серверы. Реализация документов сервера
Серверы. Элементы сервера