DRAWCLI サンプル : Active コンテナ サポートとアプリケーション固有の機能の統合
更新 : 2007 年 11 月
DRAWCLI サンプルは、ビジュアル編集コンテナ サポートを含むオブジェクト指向描画アプリケーションです。MFC Active コンテナ サンプル (CONTAINER、OCLIENT、および DRAWCLI) の中では、このサンプルが Active コンテナ サポートとアプリケーション固有の機能 (この場合は描画機能) の統合を示す最適な例です。また、DRAWCLI では "形状" や "描画ツール" のクラス (CDrawObj および CDrawTool) のデザインにおける、C++ ポリモーフィズムの効果的な使い方を示します。
セキュリティに関するメモ : |
---|
このサンプル コードは概念を示す目的で提供されているものです。必ずしも最も安全なコーディング手法に従っているわけではないので、アプリケーションまたは Web サイトでは使用しないでください。Microsoft は、サンプル コードが意図しない目的で使用された場合に、付随的または間接的な損害について責任を負いません。 |
サンプルとそのインストール手順を取得するには
Visual Studio で、[ヘルプ] メニューの [サンプル] をクリックします。
詳細については、「サンプル ファイルの格納場所」を参照してください。
使用できるサンプルの最新バージョンと完全な一覧については、オンラインの Visual Studio 2008 Samples のページを参照してください。
サンプルは、コンピュータのハード ディスク上にもあります。既定では、サンプルおよび Readme ファイルは、\Program Files\Visual Studio 9.0\Samples\ の下のフォルダにコピーされます。Visual Studio Express Edition の場合、すべてのサンプルはオンライン上にあります。
サンプルのビルドと実行
DRAWCLI サンプルをビルドおよび実行するには
ソリューション ファイル drawcli.sln を開きます。
[ビルド] メニューの [ビルド] をクリックします。
プロジェクトの Debug ディレクトリで、DRAWCLI アプリケーションを開いて実行します。
DRAWCLI の Windows ロゴの機能
DRAWCLI では、Windows のロゴ取得条件についても示します。すべての MFC アプリケーションは、Win32 実行形式、長いファイル名のサポート、UNC パス名のサポート、システム カラーとシステム メトリックの使用など、Windows ロゴ条件の一部を満たしています。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's のインターフェイスを通じてさまざまなクラスのオブジェクトとやり取りできます。
CDrawRect クラスと CDrawPoly クラスは CDrawObj の派生クラスです。CDrawRect は、四角形、角丸四角形、楕円、および線を描画するために使用されます。CDrawPoly は多角形を描画するために使用されます。これらの 2 つのクラスは、DRAWCLI の ActiveX コンテナ機能からは独立しています。
CDrawOleObj クラスも CDrawObj の派生クラスであり、埋め込みオブジェクトを表すために使用されます。CDrawOleObj は、ActiveX 固有の操作をすべて埋め込みオブジェクト CDrawItem に代行させます (以下で説明します)。CDrawOleObj は CDrawObj の派生クラスであるため、一般的な形状の操作では、埋め込みオブジェクトがほかの形状オブジェクトと同様に DRAWCLI で処理されます。
COleClientItem の派生クラスである CDrawItem クラスは、埋め込みオブジェクトに対する ActiveX 固有の動作をすべて処理します。CDrawItem の実装は、CONTAINER サンプルと OCLIENT サンプルでの COleClientItem 派生クラスの実装に似ています。
CDrawDoc クラスは、COleDocument の派生クラスです。COleDocument オブジェクトは CDrawObj オブジェクトの CObList を保持します。CDrawDoc は、[Edit Paste]、[Paste Link]、[Links] など、ActiveX コンテナ固有のいくつかのメニュー コマンドを基本クラス COleDocument に代行させます。
CDrawView は、CScrollView の派生クラスです。CDrawView の ActiveX 固有の実装は、CONTAIN サンプルと OCLIENT サンプルでのビュー クラスの実装に似ています。DRAWCLI の描画固有のユーザー インターフェイスの一括操作も CDrawView に実装されます。
キーワード
このサンプルでは、次のキーワードを使用します。
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++ のウィザード、ライブラリ、およびコンパイラの変更が反映されていませんが、必要なタスクを実行する方法は示されています。 |