Compartir a través de


Servidores: Implementar ventanas de marco en contexto

En este artículo se explica lo que debe hacer para implementar ventanas de marco en contexto en su aplicación del servidor de edición visual si no usa el Asistente para aplicaciones para crear la aplicación de su servidor. En lugar de seguir el procedimiento descrito en este artículo, puede usar una clase de ventana de marco en contexto existente desde una aplicación generada por el asistente para aplicaciones o una muestra proporcionada con Visual C++.

Para declarar una clase de ventana de marco en contexto

  1. Para declarar una clase de ventana de marco en contexto de COleIPFrameWnd.

    • Use la macro DECLARE_DYNCREATE en su archivo de encabezado de clase (.cpp).

    • Use la macro IMPLEMENT_DYNCREATE en su archivo de implementación de clase (.cpp). Esto permite que el marco cree objetos de esta clase.

  2. Declare un miembro COleResizeBar en la clase de ventana del marco. Esto es necesario si desea admitir el cambio de tamaño en contexto en las aplicaciones de servidor.

    Declare un controlador de mensajes OnCreate (mediante el Asistente para clases) y llame a Create para su miembro COleResizeBar, si lo ha definido.

  3. Si tiene una barra de herramientas, declare un miembro CToolBar en la clase ventana del marco.

    Invalide la función miembro OnCreateControlBars para crear una barra de herramientas cuando el servidor esté activo en contexto. Por ejemplo:

    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 la explicación de este código después del paso 5.

  4. Incluya el archivo de encabezado para esta clase de ventana de marco en contexto en el archivo .cpp principal.

  5. En InitInstance para su clase de aplicación, llame a la función SetServerInfo del objeto de plantilla de documento para especificar los recursos y la ventana de marco en contexto que se usará en la edición abierta y en contexto.

La serie de llamadas de función en la instrucción if crea la barra de herramientas a partir de los recursos proporcionados por el servidor. En este momento, la barra de herramientas forma parte de la jerarquía de ventanas del contenedor. Dado que esta barra de herramientas se deriva de CToolBar, pasará sus mensajes al propietario, la ventana de marco de la aplicación del contenedor, a menos que cambie el propietario. Por eso es necesario llamar a SetOwner. Esta llamada cambia la ventana donde se envían los comandos para que sea la ventana del marco en contexto del servidor, lo que ocasiona que los mensajes se pasen al servidor. Esto permite que el servidor reaccione a las operaciones de la barra de herramientas que proporciona.

El id. del mapa de bits de la barra de herramientas debe ser el mismo que los demás recursos en contexto definidos en la aplicación de su servidor. Consulte Menús y recursos: adiciones de servidor para obtener detalles.

Para obtener más información, consulte COleIPFrameWnd, COleResizeBar y CDocTemplate::SetServerInfo en la referencia de la biblioteca de clases.

Consulte también

Servidores
Servidores: Implementar un servidor
Servidores: Implementar documentos de servidor
Servidores: Elementos de servidor