Поделиться через


Серверы. Реализация окон фрейма на месте

В этой статье объясняется, что необходимо сделать для реализации окон фреймов на месте в приложении сервера визуального редактирования, если вы не используете мастер приложений для создания серверного приложения. Вместо выполнения процедуры, описанной в этой статье, можно использовать существующий класс окна фрейма на месте из созданного мастера приложения или примера, предоставленного Visual C++.

Объявление класса окна фрейма на месте

  1. Наследуйте класс окна фрейма на месте.COleIPFrameWnd

    • Используйте макрос DECLARE_DYNCREATE в файле заголовка класса.

    • Используйте макрос IMPLEMENT_DYNCREATE в файле реализации класса (CPP). Это позволяет создавать объекты этого класса платформой.

  2. Объявите COleResizeBar элемент в классе frame-window. Это необходимо для поддержки изменения размера на месте в серверных приложениях.

    Объявите OnCreate обработчик сообщений (с помощью мастера классов) и вызовите Create участника COleResizeBar , если вы определили его.

  3. Если у вас есть панель инструментов, объявите 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.

  4. Добавьте файл заголовка для этого класса фрейм-окна на месте в основной CPP-файл.

  5. В InitInstance классе приложения вызовите SetServerInfo функцию объекта шаблона документа, чтобы указать ресурсы и окно кадра на месте, которые будут использоваться в открытом и на месте редактирования.

Ряд вызовов функций в if инструкции создает панель инструментов из предоставленных ресурсов сервера. На этом этапе панель инструментов входит в иерархию окон контейнера. Так как эта панель инструментов является производным от CToolBar, она передает сообщения своему владельцу, окно фреймов приложения контейнера, если только вы не измените владельца. Именно поэтому требуется вызов SetOwner . Этот вызов изменяет окно, в котором команды отправляются в окно фрейма сервера, что приводит к передаче сообщений на сервер. Это позволяет серверу реагировать на операции на панели инструментов, которую она предоставляет.

Идентификатор растрового изображения панели инструментов должен совпадать с другими ресурсами на месте, определенными в серверном приложении. Дополнительные сведения см. в меню и ресурсах .

Дополнительные сведения см. в разделе COleIPFrameWnd, COleResizeBar и CDocTemplate::SetServerInfo в справочнике по библиотеке классов.

См. также

Серверы
Серверы. Реализация сервера
Серверы. Реализация документов сервера
Серверы. Элементы сервера