Freigeben über


DRAWCLI-Beispiel: Veranschaulicht die Integration von Active Container-Unterstützung mit anwendungsspezifischen Features

Das DRAWCLI-Beispiel ist ein objektorientiertes Zeichenprogramm mit Unterstützung für visuelle Bearbeitung Container. Von der MFC-Container Beispielen für Active – CONTAINEROCLIENT und DRAWCLI – dieses Beispiel bietet die beste Abbildung Integration von Active Container-Unterstützung mit anwendungsspezifischen Features (in diesem Fall Zeichenfunktionen). Darüber hinaus demonstriert DRAWCLI effizienten Einsatz der C++-Polymorphie im Entwurf seiner "Form""Zeichnung Tool" undKlassen (CDrawObj und CDrawTool).

SicherheitshinweisSicherheitshinweis

Dieser Beispielcode soll ein Konzept veranschaulichen, und es wird nur den Code, der für dieses Konzept relevant sind. Möglicherweise erfüllt dieser nicht die Sicherheitsanforderungen für eine bestimmte Umgebung, und er sollte nicht genau wie dargestellt verwendet werden. Wir empfehlen, Sicherheits- und Fehlerbehandlungscode hinzuzufügen, um Ihre Projekte sicherer und stabiler zu machen. Microsoft stellt diesen Beispielcode "Wie besehen"keine Garantien.

So erhalten Sie Beispiele und Anweisungen für deren Installation:

Um Beispiele von Visual Studio zuzugreifen

  • im Menü Hilfe Menü klicken Beispiele.

    Standardmäßig sind die Beispiele in installiert. Laufwerk: \Programme\Microsoft visual Studio 10.0\Samples\.

  • Die neueste Version dieses Beispiels und eine Liste der anderen Beispiele finden Sie unter Visual Studio Samples auf der MSDN-Website.

Erstellen und Ausführen des Beispiels

So erstellen Sie und führen das DRAWCLI-Beispiel

  1. Öffnen Sie die Projektmappe drawcli.sln.

  2. erstellen Sie Menü, klicken Sie auf erstellen.

  3. Öffnen Sie des Projekts Debugverzeichnis und führen Sie die Anwendung DRAWCLI aus.

DRAWCLI des Windows-Logo-Features

DRAWCLI veranschaulicht auch die Windows-Logo-Kompatibilität. Alle MFC-Anwendungen erfüllen einige Anforderungen des Windows-Logos: eine Win32-ausführbare, Unterstützung für lange Dateinamen, Unterstützung für UNC-Pfadnamen und Verwendung der Systemfarben und Metriken. DRAWCLI erfüllt die verbleibenden Anforderungen für das Windows-Logo, indem Sie die folgenden Features einschließlich.

  • ActiveX-Unterstützung. DRAWCLI ist ein Active-Container, der speichert der Dateien in das Verbunddateiformat, direkte Aktivierung unterstützt und als Ablageziel für Drag & Drop Vorgänge fungiert.

  • MAPI-Unterstützung. DRAWCLI stellt eine "als E-Mail senden"Nachricht in Ihrem Menü Datei, sodass der Benutzer ein Dokument als e-Mail-Anlage senden.

  • Kompatibilität mit Shell Richtlinien, einschließlich der Registrierung von großen und kleinen Symbole, Verwendung der Systemregistrierung statt einer INI-Datei und eine Installation und eines Deinstallationsprogramms. Für letztere DRAWCLI enthält ein Skript mit InstallSHIELD kompatibel, Stirling Software Toolkit zum Erstellen von setup und Deinstallieren von Programmen.

DRAWCLI erfüllt außerdem die folgenden Empfehlungen für Windows-Anwendungen.

  • Verwendet angesteuert Eigenschaftenseiten.

  • Allgemeine Windows-Steuerelemente verwendet.

  • Zeigt klicken Sie auf ein Kontextmenü als Reaktion auf eine rechts-Tasten-Maus.

  • Speichert Zusammenfassungsinformationen mit seinen Dokumenten.

Benutzeroberfläche des DRAWCLI ist ähnlich wie bei anderen objektorientierten Zeichnungen Programmen.

Integration von Active Container-Unterstützung mit anwendungsspezifischen Features

Das DRAWCLI-Beispiel war ursprünglich ein eigenständiges Zeichenprogramm, mit die MFC-Klassen entwickelt. Die eigenständige Version von DRAWCLI wurde dann in ein zweites Skelett von DRAWCLI mit dem Anwendungs-Assistenten ActiveX-Containerfeature erstellt integriert war. Dieser Vorgang ist ähnlich wie ActiveX-visuelle Bearbeitung fügt der Server Server-Unterstützung in SCRIBBLE.

Im Wesentlichen sollte der Entwurf einer MFC-ActiveX-Containeranwendung aussehen dieselbe, unabhängig davon, ob Sie ActiveX-Funktionalität zu einer vorhandenen eigenständigen MFC-Doc/Anwendung hinzufügen, oder ob Sie mit einer Anwendung Wizard–generated ActiveX-Containeranwendung beginnen. Nachfolgend eine kurze Beschreibung des wie DRAWCLI in anwendungsspezifischen Code und ActiveX-Container-spezifische Code getrennt ist.

  • Klasse CDrawObj, implementiert in Drawobj.cpp, ist eine Basisklasse für abgeleitete "Form"Klassen. Diese Basisklasse behandelt die Trefferüberprüfung von Formen, der Shapes verschieben und Größenänderung des Shapes. Verwendung von Polymorphie kann DRAWCLI mit Objekten verschiedener Klassen über die Schnittstelle CDrawObj interagieren.

  • Klassen CDrawRect und CDrawPoly von CDrawObj abgeleitet sind. CDrawRect wird verwendet, um das Zeichnen von Rechtecken, abgerundeten Rechtecken, Ellipsen und Linien. CDrawPoly wird verwendet, um die Polygone gezeichnet. Diese beiden Klassen sind unabhängig von DRAWCLI des ActiveX-Container-Funktionalität.

  • Klasse CDrawOleObjCDrawObj auch abgeleitet ist und wird zum Darstellen von eingebetteter Objekten. CDrawOleObj delegiert alle ActiveX-spezifischen Vorgänge an einem Objekt enthaltenen CDrawItem (siehe unten). Für die Standardform Operationen werden eingebettete Objekte wie andere Shape-Objekte in DRAWCLI behandelt, da von CDrawOleObjCDrawObj abgeleitet ist.

  • Klasse CDrawItem, abgeleitet von COleClientItem, behandelt ActiveX-spezifisches Verhalten für das eingebettete Objekt. Die Implementierung von CDrawItem ist vergleichbar mit der Implementierung des COleClientItem-abgeleiteten Klassen in der CONTAINEROCLIENT Beispiele.

  • Klasse CDrawDoc wird von COleDocument abgeleitet. Das COleDocument -Objekt verwaltet eine CObListCDrawObj-Objekte. CDrawDoc delegates several ActiveX container-specific menu commands, such as EditPaste, PasteLink, and Links, to the base class COleDocument.

  • Klasse CDrawView wird von CScrollView abgeleitet. Die Implementierung der Ansichtsklassen im Container und das OCLIENT-Beispiel ähnelt die ActiveX-spezifische Implementierung von CDrawView. Der Großteil des DRAWCLI zeichnungsspezifische-Benutzeroberfläche ist auch in CDrawView implementiert.

Schlüsselwörter

Dieses Beispiel demonstriert die Verwendung der folgenden Schlüsselwörter:

AfxGetApp; AfxGetMainWnd; AfxMessageBox; AfxOleInit; AfxRegisterWndClass; AfxThrowMemoryException; CArchive::Close; CArchive::IsStoring; CBitmap::CreateCompatibleBitmap; CBrush::CreateBrushIndirect; CBrush::CreateSolidBrush; CCmdTarget::BeginWaitCursor; CCmdTarget::EndWaitCursor; CCmdUI::Enable; CCmdUI::SetCheck; CCmdUI::SetRadio; CColorDialog::DoModal; CColorDialog::GetColor; CControlBar::EnableDocking; CControlBar::GetBarStyle; CControlBar::SetBarStyle; CDC::Attach; CDC::BitBlt; CDC::CreateCompatibleDC; CDC::DPtoLP; CDC::DrawFocusRect; CDC::FillRect; CDC::GetClipBox; CDC::GetDeviceCaps; CDC::HIMETRICtoDP; CDC::IntersectClipRect; CDC::IsPrinting; CDC::LPtoDP; CDC::LineTo; CDC::MoveTo; CDC::OffsetViewportOrg; CDC::OffsetWindowOrg; CDC::PatBlt; CDC::SelectObject; CDC::SetBkColor; CDC::SetBrushOrg; CDC::SetMapMode; CDC::SetViewportExt; CDC::SetViewportOrg; CDC::SetWindowExt; CDC::SetWindowOrg; CDialog::DoModal; CDocTemplate::SetContainerInfo; CDocument::GetFirstViewPosition; CDocument::GetNextView; CDocument::GetTitle; CDocument::OnNewDocument; CDocument::OnOpenDocument; CDocument::OnSaveDocument; CDocument::SetModifiedFlag; CDocument::SetTitle; CDocument::UpdateAllViews; CFrameWnd::DockControlBar; CFrameWnd::EnableDocking; CFrameWnd::LoadFrame; CFrameWnd::OnCreateClient; CGdiObject::UnrealizeObject; CMDIChildWnd::Create; CMenu::GetSubMenu; CMenu::LoadMenu; CMenu::TrackPopupMenu; CObList::AddTail; CObList::GetCount; CObList::GetHeadPosition; CObList::GetNext; CObList::IsEmpty; CObList::RemoveAll; CObList::RemoveAt; CObject::AssertValid; CObject::Dump; CObject::IsKindOf; CObject::Serialize; COleClientItem::Close; COleClientItem::CreateCloneFrom; COleClientItem::CreateFromData; COleClientItem::CreateStaticFromData; COleClientItem::Deactivate; COleClientItem::Delete; COleClientItem::DoVerb; COleClientItem::Draw; COleClientItem::GetActiveView; COleClientItem::GetClipboardData; COleClientItem::GetDocument; COleClientItem::GetExtent; COleClientItem::GetInPlaceWindow; COleClientItem::GetItemState; COleClientItem::GetType; COleClientItem::IsInPlaceActive; COleClientItem::OnChange; COleClientItem::OnChangeItemPosition; COleClientItem::OnGetItemPosition; COleClientItem::Release; COleClientItem::SetItemRects; COleClientItem::UpdateLink; COleDataObject::AttachClipboard; COleDataObject::GetFileData; COleDataObject::IsDataAvailable; COleDataSource::CacheGlobalData; COleDataSource::SetClipboard; COleInsertDialog::CreateItem; COleInsertDialog::DoModal; COleInsertDialog::GetSelectionType; CPen::CreatePen; CPen::CreatePenIndirect; CPrintDialog::CreatePrinterDC; CRect::BottomRight; CRect::Height; CRect::InflateRect; CRect::IntersectRect; CRect::IsRectEmpty; CRect::NormalizeRect; CRect::OffsetRect; CRect::SetRect; CRect::TopLeft; CRect::Width; CRectTracker::Draw; CRgn::CreateEllipticRgnIndirect; CRgn::CreatePolygonRgn; CRgn::CreateRoundRectRgn; CRgn::RectInRegion; CScrollView::GetDeviceScrollPosition; CScrollView::SetScrollSizes; CStatusBar::Create; CStatusBar::SetIndicators; CString::MakeLower; CToolBar::Create; CView::DoPreparePrinting; CView::GetDocument; CView::IsSelected; CView::OnActivateView; CView::OnBeginPrinting; CView::OnDragEnter; CView::OnDragLeave; CView::OnDragOver; CView::OnDraw; CView::OnDrop; CView::OnEndPrinting; CView::OnInitialUpdate; CView::OnPrepareDC; CView::OnPreparePrinting; CView::OnPrint; CView::OnScrollBy; CView::OnUpdate; CWinApp::AddDocTemplate; CWinApp::EnableShellOpen; CWinApp::InitInstance; CWinApp::LoadStdProfileSettings; CWinApp::RegisterShellFileTypes; CWinApp::SetRegistryKey; CWnd::DoDataExchange; CWnd::GetCapture; CWnd::GetParentFrame; CWnd::Invalidate; CWnd::InvalidateRect; CWnd::OnCreate; CWnd::OnDestroy; CWnd::OnEraseBkgnd; CWnd::OnLButtonDblClk; CWnd::OnLButtonDown; CWnd::OnLButtonUp; CWnd::OnMouseMove; CWnd::OnSetFocus; CWnd::OnSize; CWnd::PreCreateWindow; CWnd::ScreenToClient; CWnd::SetCapture; CWnd::SetFocus; CWnd::ShowWindow; CWnd::UpdateWindow; DragAcceptFiles; Ellipse; GetACP; GetKeyState; GetMapMode; GetVersion; GlobalFree; GlobalLock; GlobalUnlock; LOWORD; LineTo; LoadCursor; MAKELONG; MoveTo; MulDiv; Polygon; RGB; Rectangle; RegisterClipboardFormat; ReleaseCapture; RoundRect; SelectObject; SetCursor; free; malloc; memcpy; min; realloc; wcstombs

Hinweis

Einige Beispiele, z. B. eine, wurden nicht geändert, um Änderungen in der Visual C++-Assistenten, Bibliotheken und Compiler, demonstrieren aber dennoch wie Sie die gewünschte Aufgabe durchführen.

Siehe auch

Weitere Ressourcen

MFC-Beispiele