Partilhar via


Servidores: implementando janelas de quadro in-loco

Este artigo explica o que você deve fazer para implementar janelas de quadro in-loco em seu aplicativo de servidor de edição visual se você não for usar o assistente de aplicativo para criar um aplicativo de servidor. No lugar de seguir o procedimento descrito neste artigo, você pode usar uma classe de janela de quadro in-loco já existente de um aplicativo gerado pelo assistente de aplicativo ou de um exemplo fornecido com o Visual C++.

Para declarar uma classe de janela de quadro in-loco

  1. Derive uma classe de janela de quadro in-loco de COleIPFrameWnd.

    • Use a macro DECLARE_DYNCREATE no arquivo de cabeçalho da sua classe.

    • Use a macro IMPLEMENT_DYNCREATE no arquivo de implementação de classe (.cpp). Isso permite que objetos dessa classe sejam criados pela estrutura.

  2. Declare um membro COleResizeBar na classe de janela de quadro. Isso é necessário se você quiser dar suporte ao redimensionamento in-loco em aplicativos de servidor.

    Declare um manipulador de mensagens OnCreate (usando o Assistente de Classe) e chame Create para seu membro COleResizeBar, se você o tiver definido.

  3. Se você tiver uma barra de ferramentas, declare um membro CToolBar na classe de janela de quadro.

    Substitua a função membro OnCreateControlBars para criar uma barra de ferramentas quando o servidor estiver ativo no local. Por exemplo:

    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;
    }
    

    Consulte a discussão deste código após a etapa 5.

  4. Inclua o arquivo de cabeçalho para essa classe de janela de quadro in-loco no arquivo .cpp principal.

  5. Em InitInstance para sua classe de aplicativo, chame a função SetServerInfo do objeto de modelo de documento para especificar os recursos e a janela de quadro in-loco a serem usados na edição aberta e in-loco.

A série de chamadas de função na instrução if cria a barra de ferramentas a partir dos recursos fornecidos pelo servidor. Neste ponto, a barra de ferramentas faz parte da hierarquia de janelas do contêiner. Como essa barra de ferramentas é derivada de CToolBar, ela passará suas mensagens para o proprietário, a janela de quadro do aplicativo de contêiner, a menos que você altere o proprietário. É por isso que a chamada a SetOwner é necessária. Essa chamada altera a janela em que os comandos são enviados para serem a janela de quadro in-loco do servidor, fazendo com que as mensagens sejam passadas para o servidor. Isso permite que o servidor reaja às operações na barra de ferramentas que ele fornece.

A ID do bitmap da barra de ferramentas deve ser igual aos outros recursos in-loco definidos em seu aplicativo de servidor. Consulte Menus e recursos: adições de servidor para obter detalhes.

Para obter mais informações, consulte COleIPFrameWnd, COleResizeBar e CDocTemplate::SetServerInfo na Referência da Biblioteca de Classes.

Confira também

Servidores
Servidores: implementando um servidor
Servidores: implementando documentos de servidor
Servidores: itens de servidor