DRAWCLI サンプル:Active コンテナー サポートを統合するアプリケーション固有の機能を示しています。
DRAWCLI サンプルは、ビジュアル編集コンテナー サポートを含むオブジェクト指向描画アプリケーションです。 MFC Active コンテナー サンプル (CONTAINER、OCLIENT、および DRAWCLI) の中では、このサンプルが Active コンテナー サポートとアプリケーション固有の機能 (この場合は描画機能) の統合を示す最適な例です。 さらに、DRAWCLI C++ のポリモーフィズム「形状」の設計の効果的な使用方法を示します図面のツールクラス (CDrawObjCDrawTool)。
セキュリティに関するメモ |
---|
このサンプル コードは概念を示すためのものであり、その概念に関連するコードのみを示しています。特定の環境について必ずしもセキュリティ要件を満たしていませんので、そのまま使用しないでください。セキュリティおよびエラー処理コードを追加して、プロジェクトをより安全かつ堅牢にすることをお勧めします。これらのサンプル コードは、現状有姿のままで提供されるものであり、一切保証されていません。 |
サンプルとそのインストール手順を取得するには
Visual Studio のサンプルにアクセスするには
[ヘルプ] メニューの [サンプル] をクリックします。
既定では、これらのサンプルは drive:\Program Files\Microsoft Visual Studio 10.0\Samples\ にインストールされています。
サンプルのビルドと実行
DRAWCLI サンプルをビルドおよび実行するには
ソリューション ファイル drawcli.sln を開きます。
[ビルド] メニューの [ビルド] をクリックします。
プロジェクトの デバッグ ディレクトリから、開くし、DRAWCLI アプリケーションを実行します。
DRAWCLI の Windows ロゴの機能
DRAWCLI では、Windows のロゴ取得条件についても示します。 すべての MFC アプリケーションに Windows ロゴの要件の一部を満たしています。UNC パス名、および使用のシステム カラーとメトリックスを Win32 実行可能ファイル、長いファイル名のサポートをサポートします。 DRAWCLI は、以下の機能を組み込むことによって、その他の Windows ロゴ条件を満たします。
ActiveX のサポート。 DRAWCLI は、ファイルを複合ファイル形式で格納し、埋め込み先編集の有効化をサポートし、ドラッグ アンド ドロップ操作のドロップ ターゲットとして機能する Active コンテナーです。
MAPI のサポート。 DRAWCLI は、[File] メニューに対して "Send as Mail" メッセージを提供し、ユーザーがドキュメントをメールの添付ファイルとして送信できるようにします。
大小のアイコンの登録、.ini ファイルに代わるレジストリの使用、セットアップ プログラムとアンインストール プログラムの用意などを含むシェル ガイドラインへの準拠。 DRAWCLI は、セットアップ プログラムとアンインストール プログラムを作成するための Stirling Software のツールキットである InstallSHIELD と互換性のあるスクリプトを組み込みます。
DRAWCLI は、Windows アプリケーションについての以下の推奨事項も満たしています。
タブ付きプロパティ ページの使用
Windows コモン コントロールの使用
マウスの右ボタンのクリックに応答するショートカット メニューの表示
ドキュメントの概要情報の格納
DRAWCLI のユーザー インターフェイスは、ほかのオブジェクト指向描画プログラムと似ています。
Active コンテナー サポートとアプリケーション固有の機能の統合
DRAWCLI サンプルは当初、MFC クラスを使用して開発されたスタンドアロンの描画アプリケーションでした。 その後、スタンドアロン バージョンの DRAWCLI は、アプリケーション ウィザードの ActiveX コンテナー機能を使用して作成された、第 2 のスケルトン バージョンの DRAWCLI と統合されました。 このプロセスは、ActiveX ビジュアル編集サーバーがサーバー サポートを SCRIBBLE に追加する方法と似ています。
ActiveX 機能を既存のスタンドアロン MFC (ドキュメント/ビュー) アプリケーションに追加するかどうか、またはアプリケーション ウィザードによって生成された ActiveX コンテナー アプリケーションを最初から使用するかどうかに関係なく、MFC ActiveX コンテナー アプリケーションのデザインも本質的には同じです。 DRAWCLI でアプリケーション固有のコードと ActiveX コンテナー固有のコードがどのように分けられているかについて、次で簡単に説明します。
Drawobj.cpp に実装されている CDrawObj クラスは、派生された "形状" のクラスの基本クラスです。 この基本クラスでは、形状のヒット テスト、形状の移動、および形状のサイズ変更が扱われます。 ポリモーフィズムを使用すると、DRAWCLI CDrawObj インターフェイスを介して別のクラスのオブジェクトと対話できます。
クラス CDrawRect および CDrawPoly 派生 CDrawObj から。 CDrawRect 四角形、角丸四角形、楕円、および線を描画するために使用されます。 CDrawPoly 多角形を描画するために使用されます。 これらの 2 つのクラスは、DRAWCLI の ActiveX コンテナー機能からは独立しています。
クラス CDrawOleObj も派生から CDrawObj、および埋め込みオブジェクトを表すために使用します。 CDrawOleObj 任意 ActiveX 固有の演算 (下記参照) が含まれている CDrawItem オブジェクトに代行させます。 CDrawOleObj CDrawObj 派生しているため汎用図形操作では、埋め込みオブジェクト DRAWCLI 内の他の図形オブジェクトと同様に扱うことができます。
CDrawItemから派生したクラス COleClientItem ActiveX 固有のすべての動作は、埋め込みオブジェクトを処理します。 CDrawItem の実装は、 COleClientItemの実装に似ていますが、CONTAINER の ms177529(v=vs.100).mdOCLIENT サンプル内のクラスを派生します。
クラス CDrawDocCOleDocument から派生しています。 COleDocument オブジェクトは CObList オブジェクトの CDrawObj を保持します。 CDrawDoc delegates several ActiveX container-specific menu commands, such as EditPaste, PasteLink, and Links, to the base class COleDocument.
クラス CDrawViewCScrollView から派生しています。 CDrawView の ActiveX 固有実装が、OCLIENT サンプル内のビュー クラスの実装に似ています。 DRAWCLI の図面特有のユーザー インターフェイスの大部分は CDrawView にも実装されます。
Keywords
このサンプルでは、次のキーワードを使用します。
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
注意
このサンプルを含む一部のサンプルには、Visual C++ のウィザード、ライブラリ、およびコンパイラの変更が反映されていませんが、必要なタスクを実行する方法は示されています。