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 incrustada existente de una aplicación generada por el asistente de aplicaciones o un ejemplo de aplicación proporcionado 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 el archivo de encabezado de clase.

    • Use la macro IMPLEMENT_DYNCREATE en el 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 CToolBar miembro en la clase frame-window.

    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 siguiendo el paso 5.

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

  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 if instrucción crea la barra de herramientas a partir de los recursos proporcionados por el servidor. En este punto, 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 contenedora, a menos que cambie el propietario. Por eso es necesario llamar a SetOwner . Esta llamada cambia la ventana en la que se envían comandos para que sean la ventana de marco local del servidor, lo que hace que los mensajes se pasen al servidor. Esto permite al servidor reaccionar a las operaciones de la barra de herramientas que proporciona.

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

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

Consulte también

Servidores
Servidores: Implementación de un servidor
Servidores: Implementar documentos de servidor
Servidores: elementos de servidor