HIERSVR-Beispiel: Demonstriert eine Serveranwendung mit OLE Drag & Drop
Aktualisiert: November 2007
HIERSVR ist ein Beispiel für eine Serveranwendung für visuelle Bearbeitung, die sowohl verknüpfte als auch direkt bearbeitete Objekte unterstützt. Darüber hinaus kann diese Anwendung als "Vollserver" auch Dateien direkt öffnen und speichern. Das HIERSVR-Objekt ist ein Hierarchiediagramm mit mehreren Ebenen, wobei jeder Knoten in der Hierarchie aus Text besteht, der von einem Rechteck oder einer anderen Form eingerahmt ist. Zusätzlich zur Serverfunktionalität veranschaulicht HIERSVR auch OLE-Drag & Drop sowie Kopieren in die Zwischenablage.
Sicherheitshinweis: |
---|
Dieser Beispielcode dient dazu, ein Konzept zu veranschaulichen. Er sollte nicht für Anwendungen oder Websites verwendet werden, da dieser Code unter Umständen nicht die sicherste Codierungstechnik darstellt. Microsoft übernimmt keine Haftung für beiläufig entstandene Schäden oder Folgeschäden, falls der Beispielcode nicht bestimmungsgemäß verwendet wird. |
So rufen Sie Beispiele und Anweisungen für ihre Installation ab
Klicken Sie in Visual Studio im Menü Hilfe auf Beispiele.
Weitere Informationen finden Sie unter Suchen von Beispieldateien.
Die neueste Version und vollständige Liste mit Beispielen ist online unter Visual Studio 2008 Samples verfügbar.
Sie können auch Beispiele auf der Festplatte des Computers suchen. Standardmäßig werden Beispiele und eine Infodatei in einen Ordner unter \Programme\Visual Studio 9.0\Samples\ kopiert. Für Express Editions von Visual Studio sind alle Beispiele online verfügbar.
Erstellen und Ausführen des Beispiels
So erstellen Sie das HIERSVR-Beispiel und führen es aus
Öffnen Sie die Projektmappe hiersvr.sln.
Klicken Sie im Menü Erstellen auf Erstellen.
Führen Sie das HIERSRV-Beispiel als eigenständige Anwendung aus, damit es sich beim System registrieren kann.
HIERSRV-Diagramme
Der von HIERSVR bearbeitete und angezeigte Dokument- oder Objekttyp ist ein Hierarchiediagramm mit einfacher Vererbung. Mit Ausnahme des Stammknotens hat jeder Knoten im Diagramm lediglich einen übergeordneten Knoten. Zu jedem übergeordneten Knoten können mehrere untergeordnete Knoten gehören. Das Organigramm eines Unternehmens ist ein Beispiel für ein Hierarchiediagramm. Dies gilt auch für die Liste der MFC-Klassen, da diese keine C++-Mehrfachvererbung verwenden. Mfcclass.hie wurde daher als HIERSVR-Beispieldokument hinzugefügt.
Jeder Knoten in der Hierarchie verfügt über eine minimale Gruppe von Attributen.
Beschreibung – Text, der aus höchstens 30 Zeichen besteht.
Form – Format des Rechtecks, welches den Text umgibt (Rechteck, abgerundetes Rechteck oder ovales Rechteck).
Objektschlüsselverknüpfung (optional) – Name, der zur Bezeichnung eines verknüpften Elements verwendet wird. Wenn die Objektschlüsselverknüpfung nicht angegeben ist, nimmt sie standardmäßig den Wert der Beschreibungszeichenfolge an. Dieser Name ist sichtbar, wenn Sie die Verknüpfung mit dem Befehl Verknüpfungen bearbeiten in der Clientanwendung anzeigen.
Erstellen eines HIERSVR-Diagramms
Ein neues HIERSVR-Diagramm besteht zunächst aus einem einzelnen Knoten mit dem Text "Stammknoten". Wenn Sie einen Knoten hinzufügen möchten, wählen Sie zunächst seinen übergeordneten Knoten aus, indem Sie darauf klicken. Klicken Sie anschließend im Menü Bearbeiten auf Knoten hinzufügen. Geben Sie im Dialogfeld Knoten hinzufügen die drei oben beschriebenen Attribute an. Wenn Sie die Attribute eines Knotens ändern möchten, wählen Sie diesen durch einen Mausklick aus und klicken dann auf Knoten ändern. Wenn Sie einen Knoten verschieben möchten, klicken Sie darauf und ziehen ihn an eine neue Position.
HIERSVR importiert Hierarchiedaten aus einer Textdatei, die folgendermaßen formatiert ist: Der Text in jeder Zeile (abgegrenzt durch Zeilenvorschub) stellt die Beschreibung des Knotens dar. Die Anzahl der Tabulatorzeichen, die dem Text vorausgehen, bestimmt die Ebene des Knotens in der Hierarchie. Im Beispielverzeichnis von HIERSVR ist Mfcclass.txt die Textimportdatei für Mfcclass.hie, die systemeigene HIERSVR-Datei.
Wenn Sie ein Hierarchiediagramm mit einem Clientdokument verknüpfen möchten, müssen Sie die Datei zunächst in HIERSVR speichern. Wählen Sie dann den Knoten, den Sie kopieren möchten, mit Bearbeiten > Kopieren aus. Dadurch wird die Verknüpfung in die Zwischenablage kopiert. Der Text des ausgewählten Knotens wird ebenfalls in diesem Format in die Zwischenablage kopiert, und die gesamte Knotenhierarchie wird in ein HIERSVR-systemeigenes Zwischenablageformat kopiert. Das Speichern des Dokuments ist erforderlich, weil das Verknüpfungsformat einen Dokumentnamen benötigt. Klicken Sie abschließend in der Clientanwendung auf Bearbeiten > Verknüpfung einfügen (oder klicken Sie zunächst auf Bearbeiten > Inhalt einfügen, und dann auf Verknüpfung einfügen). Im Clientdokument wird die Verknüpfung als der Knoten angezeigt, den Sie vor dem Klicken von Bearbeiten > Kopieren ausgewählt haben. Das Rechteck wird ebenfalls angezeigt.
Wenn Sie ein Hierarchiediagramm in ein Clientdokument einbetten möchten, können Sie dies über die Zwischenablage tun (wie oben für das Verknüpfen von Objekten erläutert) oder indem Sie in der Clientanwendung auf Neues Objekt einfügen klicken. Wenn Sie den Vorgang über die Zwischenablage durchführen möchten, verwenden Sie in der Clientanwendung Bearbeiten > Einfügen statt Bearbeiten > Verknüpfung einfügen. Nur die Unterhierarchie, die bei dem ausgewählten Knoten beginnt, wird in das Clientdokument eingebettet.
Unabhängig davon, ob Sie das Diagramm verknüpfen oder einbetten, wird der oberste ausgewählte Knoten im Fenster der Clientanwendung angezeigt. Wenn Sie das restliche Diagramm anzeigen möchten, müssen Sie HIERSVR per Doppelklick von der Clientanwendung aus starten.
Server für visuelle Bearbeitung
HIERSVR veranschaulicht die Klassenableitungen, die zur Implementierung einer voll funktionsfähigen Serveranwendung für visuelle Bearbeitung erforderlich sind. Außerdem werden einige der meistverwendeten Benutzeroberflächen für Clientanwendungen demonstriert, die zusätzlichen Code erfordern.
Die drei Frameworkklassen, die zur Implementierung einer Serveranwendung für visuelle Bearbeitung verwendet werden, werden durch Folgendes veranschaulicht:
Ein COleTemplateServer-Objekt, das als Membervariable m_server in der Anwendungsklasse von HIERSVR gespeichert ist.
Die HIERSVR-eigene CServerDoc-Klasse, die von COleServerDoc abgeleitet ist.
Die HIERSVR-eigene CServerItem-Klasse, die von COleServerItem abgeleitet ist.
Die HIERSVR-eigene CInPlaceFrame-Klasse, die von COleIPFrameWnd abgeleitet ist und ursprünglich vom Anwendungs-Assistenten erstellt wurde.
Schlüsselwörter
Dieses Beispiel demonstriert die Verwendung der folgenden Schlüsselwörter:
AfxGetMainWnd; AfxMessageBox; AfxOleInit; AfxThrowMemoryException; AfxThrowNotSupportedException; AfxThrowResourceException; CArchive::Close; CCmdTarget::BeginWaitCursor; CCmdTarget::EndWaitCursor; CCmdUI::Enable; CCmdUI::SetCheck; CControlBar::EnableDocking; CControlBar::GetBarStyle; CControlBar::SetBarStyle; CDC::GetDeviceCaps; CDC::LPtoDP; CDC::LPtoHIMETRIC; CDC::SelectObject; CDC::SetMapMode; CDC::SetViewportExt; CDC::SetWindowExt; CDialog::DoModal; CDialog::OnInitDialog; CDocTemplate::SetServerInfo; CDocument::DeleteContents; CDocument::GetFirstViewPosition; CDocument::GetNextView; CDocument::OnNewDocument; CDocument::SetModifiedFlag; CDocument::UpdateAllViews; CFile::Open; CFileDialog::DoModal; CFileDialog::GetPathName; CFontDialog::DoModal; CFontDialog::GetColor; CFrameWnd::Create; CFrameWnd::DockControlBar; CFrameWnd::EnableDocking; CFrameWnd::LoadFrame; CMenu::GetSubMenu; CMenu::LoadMenu; CMenu::TrackPopupMenu; CObList::AddHead; CObList::AddTail; CObList::GetCount; CObList::GetHeadPosition; CObList::GetNext; CObList::GetTail; CObList::RemoveAll; CObList::RemoveAt; CObject::AssertValid; CObject::Dump; CObject::Serialize; COleDataObject::AttachClipboard; COleDataObject::GetFileData; COleDataObject::IsDataAvailable; COleIPFrameWnd::OnCreateControlBars; COleLinkingDoc::OnGetLinkedItem; COleServerDoc::GetItemPosition; COleServerDoc::IsInPlaceActive; COleServerDoc::OnDeactivateUI; COleServerDoc::OnGetEmbeddedItem; COleServerDoc::OnSetItemRects; COleServerDoc::RequestPositionChange; COleServerDoc::UpdateAllItems; COleServerItem::CopyToClipboard; COleServerItem::DoDragDrop; COleServerItem::GetClipboardData; COleServerItem::GetDataSource; COleServerItem::GetDocument; COleServerItem::GetItemName; COleServerItem::IsLinkedItem; COleServerItem::OnDraw; COleServerItem::OnGetClipboardData; COleServerItem::OnGetExtent; COleServerItem::OnOpen; COleServerItem::OnRenderFileData; COleServerItem::SetItemName; COleTemplateServer::ConnectTemplate; COleTemplateServer::UpdateRegistry; CPen::CreatePen; CRect::BottomRight; CRect::Height; CRect::InflateRect; CRect::IntersectRect; CRect::OffsetRect; CRect::PtInRect; CRect::Size; CRect::TopLeft; CScrollView::GetDeviceScrollPosition; CScrollView::ScrollToPosition; CScrollView::SetScrollSizes; CString::Empty; CString::GetLength; CString::IsEmpty; CToolBar::Create; CToolBar::LoadBitmap; CToolBar::SetButtons; CView::GetDocument; CView::OnDragEnter; CView::OnDragLeave; CView::OnDragOver; CView::OnDraw; CView::OnDrop; CView::OnInitialUpdate; CView::OnPrepareDC; CView::OnUpdate; CWinApp::AddDocTemplate; CWinApp::EnableShellOpen; CWinApp::ExitInstance; CWinApp::InitInstance; CWinApp::LoadStdProfileSettings; CWinApp::RegisterShellFileTypes; CWnd::ClientToScreen; CWnd::DoDataExchange; CWnd::GetClientRect; CWnd::GetParentFrame; CWnd::Invalidate; CWnd::InvalidateRect; CWnd::OnCreate; CWnd::OnKeyDown; CWnd::OnLButtonDblClk; CWnd::OnLButtonDown; CWnd::OnRButtonDown; CWnd::OnSize; CWnd::SetOwner; CWnd::ShowWindow; CWnd::UpdateWindow; CreateFontIndirect; DragAcceptFiles; EnableWindow; ExtTextOut; GetDeviceCaps; GetSysColor; GetTextExtent; GetWindowTextLength; IsChild; LPtoDP; LineTo; LoadBitmap; MoveTo; MulDiv; RGB; RectVisible; Rectangle; RegisterClipboardFormat; RoundRect; SelectObject; SetTextColor; SetViewportExt; SetWindowExt; SetWindowOrg; _alloca; afxMemDF; lstrcpy; memset; min; strnlen; wcstombs
Hinweis: |
---|
In diesem und einigen anderen Beispielen wurden die Änderungen an den Visual C++-Assistenten, -Bibliotheken und -Compilern noch nicht nachvollzogen. Sie demonstrieren aber dennoch, wie Sie die gewünschte Aufgabe durchführen können. |