Server: Implementieren eines In-Place-Frame-Fensters

In diesem Artikel wird erläutert, was Sie tun müssen, um direkte Framefenster in Ihrer visuellen Bearbeitungsserveranwendung zu implementieren, wenn Sie den Anwendungs-Assistenten nicht zum Erstellen Ihrer Serveranwendung verwenden. Anstelle der in diesem Artikel beschriebenen Prozedur können Sie eine vorhandene direkte Framefensterklasse aus einer anwendungs-assistentengenerierten Anwendung oder einem Beispiel verwenden, das mit Visual C++ bereitgestellt wird.

So deklarieren Sie eine direkte Framefensterklasse

  1. Leiten Sie eine direkte Framefensterklasse von COleIPFrameWnd.

    • Verwenden Sie das DECLARE_DYNCREATE Makro in der Klassenheaderdatei.

    • Verwenden Sie das IMPLEMENT_DYNCREATE Makro in der Klassenimplementierungsdatei (.cpp). Auf diese Weise können Objekte dieser Klasse vom Framework erstellt werden.

  2. Deklarieren Sie ein COleResizeBar Element in der Framefensterklasse. Dies ist erforderlich, wenn Sie die direkte Größenänderung in Serveranwendungen unterstützen möchten.

    Deklarieren Sie einen OnCreate Nachrichtenhandler (mithilfe des Klassen-Assistenten), und rufen Sie ihr COleResizeBar Mitglied aufCreate, wenn Sie ihn definiert haben.

  3. Wenn Sie über eine Symbolleiste verfügen, deklarieren Sie ein CToolBar Element in der Framefensterklasse.

    Überschreiben Sie die OnCreateControlBars Memberfunktion, um eine Symbolleiste zu erstellen, wenn der Server aktiv ist. Beispiel:

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

    Weitere Informationen finden Sie in der Erläuterung dieses Codes im folgenden Schritt 5.

  4. Fügen Sie die Headerdatei für diese direkte Framefensterklasse in die Standard CPP-Datei ein.

  5. InitInstance Rufen Sie für Ihre Anwendungsklasse die SetServerInfo Funktion des Dokumentvorlagenobjekts auf, um die Ressourcen und das direkte Framefenster anzugeben, das in der geöffneten und direkten Bearbeitung verwendet werden soll.

Die Reihe von Funktionsaufrufen in der if Anweisung erstellt die Symbolleiste aus den Ressourcen, die der Server bereitgestellt hat. An diesem Punkt ist die Symbolleiste Teil der Fensterhierarchie des Containers. Da diese Symbolleiste von CToolBardieser Symbolleiste abgeleitet wird, übergibt sie ihre Nachrichten an den Besitzer, das Framefenster der Containeranwendung, es sei denn, Sie ändern den Besitzer. Deshalb ist der Aufruf SetOwner erforderlich. Dieser Aufruf ändert das Fenster, in dem Befehle als direktes Framefenster des Servers gesendet werden, wodurch die Nachrichten an den Server übergeben werden. Auf diese Weise kann der Server auf Vorgänge auf der von ihr bereitgestellten Symbolleiste reagieren.

Die ID für die Symbolleistenbitmap sollte mit den anderen in Ihrer Serveranwendung definierten direkten Ressourcen identisch sein. Weitere Informationen finden Sie unter Menüs und Ressourcen: Serverzufügungen .

Weitere Informationen finden Sie unter COleIPFrameWnd, COleResizeBar und CDocTemplate::SetServerInfo in der Klassenbibliotheksreferenz.

Siehe auch

Server
Server: Implementieren eines Servers
Server: Implementieren von Serverdokumenten
Server: Serverelemente