次の方法で共有


HIERSVR サンプル : OLE ドラッグ アンド ドロップを含むサーバー アプリケーションの例

更新 : 2007 年 11 月

HIERSVR サンプルは、リンクされたオブジェクトと埋め込み先編集オブジェクトの両方をサポートするビジュアル編集サーバー アプリケーションの例です。また、"フル" サーバーと同様に、このアプリケーションではファイルを直接開いたり保存したりできます。HIERSVR オブジェクトはマルチ レベル階層ダイアグラムです。階層の各ノードは、四角形またはその他の形状で囲まれたテキストで構成されます。HIERSVR では、サーバー機能の説明だけでなく、OLE のドラッグ アンド ドロップやクリップボードへのコピーについても示します。

8c47csfz.alert_security(ja-jp,VS.90).gifセキュリティに関するメモ :

このサンプル コードは概念を示す目的で提供されているものです。必ずしも最も安全なコーディング手法に従っているわけではないので、アプリケーションまたは Web サイトでは使用しないでください。Microsoft は、サンプル コードが意図しない目的で使用された場合に、付随的または間接的な損害について責任を負いません。

サンプルとそのインストール手順を取得するには

  • Visual Studio で、[ヘルプ] メニューの [サンプル] をクリックします。

    詳細については、「サンプル ファイルの格納場所」を参照してください。

  • 使用できるサンプルの最新バージョンと完全な一覧については、オンラインの Visual Studio 2008 Samples のページを参照してください。

  • サンプルは、コンピュータのハード ディスク上にもあります。既定では、サンプルおよび Readme ファイルは、\Program Files\Visual Studio 9.0\Samples\ の下のフォルダにコピーされます。Visual Studio Express Edition の場合、すべてのサンプルはオンライン上にあります。

サンプルのビルドと実行

HIERSVR サンプルをビルドおよび実行するには

  1. ソリューション ファイル hiersvr.sln を開きます。

  2. [ビルド] メニューの [ビルド] をクリックします。

  3. システムに登録するために、HIERSRV をスタンドアロン アプリケーションとして実行します。

HIERSRV のダイアグラム

HIERSVR で編集と表示が行われるドキュメントやオブジェクトの種類は、単一継承階層ダイアグラムです。ルート ノード以外のダイアグラムの各ノードには親ノードが 1 つだけあります。親はそれぞれ複数の子を持つことができます。階層ダイアグラムの例としては企業の組織図があります。C++ 多重継承が使用されないため、MFC クラスのリストもこれに該当します。Mfcclass.hie は HIERSVR ドキュメントの例として組み込まれています。

階層内のすべてのノードの最小限の属性は次のとおりです。

  • [Description] - 最大 30 文字で構成されているテキスト。

  • [Shape] - テキストを囲む四角形。四角形、角丸四角形、または楕円形です。

  • [Item Link Key] (省略可能) - リンク アイテムを参照するための名前。指定しない場合は、既定で説明の文字列 ([Description]) がアイテム キー リンクになります。クライアント アプリケーションで、[Edit Links] を使用してリンクを表示するときに、この名前が表示されます。

HIERSVR ダイアグラムの作成

新しい HIERSVR ダイアグラムは、"Root node" というテキストを含む 1 つのノードから始まります。ノードを追加するには、最初に親ノードをクリックして選択します。次に、[Edit] メニューの [Add Node] をクリックします。[Add Node] ダイアログ ボックスで、上で示した 3 つの属性を指定します。ノードの属性を変更するには、属性をクリックして選択し、[Change Node] をクリックします。ノードを移動するには、そのノードをクリックして別の場所までドラッグします。

HIERSVR は、ライン フィードで区切られた各行のテキストがノードの [Description] であるように書式指定されたテキスト ファイルから階層情報をインポートします。テキストの前に指定されたタブ文字の数によって、階層でのノードのレベルが決まります。HIERSVR サンプルのディレクトリでは、Mfcclass.txt が、ネイティブな HIERSVR ファイルである Mfcclass.hie のためのテキスト インポート ファイルです。

階層ダイアグラムをクライアント ドキュメントにリンクするには、まずファイルを HIERSVR に保存する必要があります。次に、[Edit] メニューの [Copy] を使用して、コピーするノードを選択します。これで、リンクがクリップボードにコピーされます。選択したノードのテキストも CF_TEXT 形式でクリップボードにコピーされます。また、階層全体のノードは HIERSVR 固有のクリップボード形式でコピーされます。リンク形式ではドキュメント名が必要なため、ドキュメントの保存が必須です。最後に、クライアント アプリケーションで、[Edit Paste Link] を使用するか、[Edit Paste Special] メニューの [Paste Link] をクリックします。[Edit Copy] をクリックする前に選択したノードとして、リンクがクライアント ドキュメントに表示されます。また、四角形も表示されます。

クライアント ドキュメントに階層ダイアグラムを埋め込むには、オブジェクトをリンクするときと同様にクリップボードによる手順を使用するか、またはクライアント アプリケーションの [Insert New Object] をクリックできます。クリップボードを使用する場合は、クライアント アプリケーションの [Edit Paste Link] ではなく [Edit Paste] を使用してください。選択したノード以下のサブ階層だけが、クライアント ドキュメントに埋め込まれます。

ダイアグラムはリンクでも埋め込みでも、選択した最上位のノードだけがクライアント アプリケーション ウィンドウに表示されます。ほかのダイアグラムを表示するには、アイテムをダブルクリックすることによって、クライアント アプリケーションで HIERSVR を起動する必要があります。

ビジュアル編集サーバー

HIERSVR では、機能を完全に備えたビジュアル編集サーバー アプリケーションの実装に必要なクラス派生について示します。また、追加コードを必要とする、最も一般的なクライアント アプリケーションのユーザー インターフェイスもいくつか示します。

ビジュアル編集サーバー アプリケーションの実装に使用される 3 つのフレームワーク クラスは、以下の項目によって説明されます。

  • HIERSVR のアプリケーション クラスにメンバ変数 m_server として格納されている COleTemplateServer オブジェクト

  • COleServerDoc から派生した、HIERSVR の CServerDoc クラス

  • COleServerItem から派生した、HIERSVR の CServerItem クラス

  • 元はアプリケーション ウィザードで作成された COleIPFrameWnd から派生した、HIERSVR の CInPlaceFrame クラス

キーワード

このサンプルでは、次のキーワードを使用します。

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

8c47csfz.alert_note(ja-jp,VS.90).gifメモ :

このサンプルを含む一部のサンプルには、Visual C++ のウィザード、ライブラリ、およびコンパイラの変更が反映されていませんが、必要なタスクを実行する方法は示されています。

参照

その他の技術情報

MFC サンプル