Partager via


Serveurs : implémentations de fenêtres frame sur place

Cet article explique ce que vous devez faire pour implémenter des fenêtres frame sur place dans votre application serveur d’édition visuelle si vous n’utilisez pas l’Assistant Application pour créer votre application serveur. À la place de la procédure décrite dans cet article, vous pouvez utiliser une classe frame-window existante à partir d’une application générée par l’Assistant Application ou d’un exemple fourni avec Visual C++.

Pour déclarer une classe de fenêtre frame en place

  1. Dérivez une classe de fenêtre frame en place depuis COleIPFrameWnd.

    • Utilisez la macro DECLARE_DYNCREATE dans votre fichier d’en-tête de classe.

    • Utilisez la macro IMPLEMENT_DYNCREATE dans votre fichier d’implémentation de classe (.cpp). Cela permet aux objets de cette classe d’être créés par l’infrastructure.

  2. Déclarez un membre COleResizeBar dans la classe de fenêtre frame. Cela est nécessaire si vous souhaitez prendre en charge le redimensionnement sur place dans les applications serveur.

    Déclarez un handler de messages OnCreate (à l’aide de l’assistant de classe) et appelez Create pour votre membre COleResizeBar si vous l’avez défini.

  3. Si vous disposez d’une barre d’outils, déclarez un CToolBar membre dans la classe frame-window.

    Remplacez la OnCreateControlBars fonction membre pour créer une barre d’outils lorsque le serveur est actif sur place. Par exemple:

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

    Consultez la discussion de ce code à l’étape 5 suivante.

  4. Incluez le fichier d'en-tête pour cette classe de fenêtre-cadre in-place dans votre fichier .cpp principal.

  5. Dans InitInstance pour votre classe d'application, appelez la fonction SetServerInfo de l'objet modèle de document afin de spécifier les ressources et la fenêtre frame en place à utiliser pour l'ouverture et la modification en place.

La série d’appels de fonction dans l’instruction if crée la barre d’outils à partir des ressources fournies par le serveur. À ce stade, la barre d’outils fait partie de la hiérarchie des fenêtres du conteneur. Étant donné que cette barre d’outils est dérivée de CToolBar, elle transmet ses messages à son propriétaire, la fenêtre frame de l’application conteneur, sauf si vous modifiez le propriétaire. C'est pourquoi l'appel à SetOwner est nécessaire. Cet appel modifie la fenêtre lorsque les commandes sont envoyées à la fenêtre frame en place du serveur, ce qui fait que des messages sont transmis au serveur. Cela permet au serveur de réagir aux opérations de la barre d’outils qu’il fournit.

L’ID de la bitmap de la barre d’outils doit être identique aux autres ressources sur place définies dans votre application serveur. Consultez menus et ressources : Ajouts de serveur pour plus d’informations.

Pour plus d’informations, consultez COleIPFrameWnd, COleResizeBar et CDocTemplate ::SetServerInfo dans la référence de la bibliothèque de classes.

Voir aussi

Serveurs
Serveurs : implémentation d’un serveur
Serveurs : implémentation de documents serveur
Serveurs : éléments de serveur