Compartilhar via


Servidores: Implementando o In-Place Frame Windows

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 usar o assistente de aplicativo para criar seu aplicativo de servidor. Em vez de seguir o procedimento descrito neste artigo, você pode usar uma classe de janela de quadro existente no local de um aplicativo gerado pelo assistente de aplicativo ou um exemplo fornecido com o Visual C++.

Para declarar uma classe de janela de quadro in-loco

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

    • Use a macro DECLARE_DYNCREATE no arquivo de cabeçalho de 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 COleResizeBar membro na classe de janela de quadros. Isso é necessário se você quiser dar suporte ao redimensionamento in-loco em aplicativos de servidor.

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

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

    Substitua a OnCreateControlBars função membro 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 dessa classe de janela de quadro in-loco em seu arquivo de .cpp principal.

  5. Para InitInstance sua classe de aplicativo, chame a SetServerInfo função 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 if instrução 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, CToolBarela passará suas mensagens para seu proprietário, a janela de quadro do aplicativo de contêiner, a menos que você altere o proprietário. É por isso que a chamada é SetOwner necessária. Essa chamada altera a janela em que os comandos são enviados para ser 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 a mesma dos 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.

Consulte também

Servidores
Servidores: Implementando um servidor
Servidores: Implementando documentos do servidor
Servidores: Itens do Servidor