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
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.
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 ihrCOleResizeBar
Mitglied aufCreate
, wenn Sie ihn definiert haben.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.
Fügen Sie die Headerdatei für diese direkte Framefensterklasse in die Standard CPP-Datei ein.
InitInstance
Rufen Sie für Ihre Anwendungsklasse dieSetServerInfo
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 CToolBar
dieser 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