HIERSVR サンプル:OLE ドラッグ アンド ドロップでのサーバー アプリケーションを示します

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

セキュリティに関するメモセキュリティに関するメモ

このサンプル コードは概念を示すためのものであり、その概念に関連するコードのみを示しています。特定の環境について必ずしもセキュリティ要件を満たしていませんので、そのまま使用しないでください。セキュリティおよびエラー処理コードを追加して、プロジェクトをより安全かつ堅牢にすることをお勧めします。これらのサンプル コードは、現状有姿のままで提供されるものであり、一切保証されていません。

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

Visual Studio のサンプルにアクセスするには

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

    既定では、これらのサンプルは drive:\Program Files\Microsoft Visual Studio 10.0\Samples\ にインストールされています。

  • このサンプルの最新版および他のサンプルの一覧については、MSDN Web サイト上で Visual Studio サンプル 」を参照してください。

サンプルのビルドと実行

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 つのノードから始まります。ノードを追加するには、最初に親ノードをクリックして選択します。 ノード追加 編集 メニュー] をクリックします。 ノード追加 ダイアログ ボックスで、上記の 3 つの属性を指定します。 ノードの属性を変更するには、マウスのクリックで選択し、変更するノード をクリックします。 ノードを移動するには、そのノードをクリックして別の場所までドラッグします。

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

階層ダイアグラムをクライアント ドキュメントにリンクするには、まずファイルを HIERSVR に保存する必要があります。 コピーの編集 を使用してコピーするノードを選択します。 これで、リンクがクリップボードにコピーされます。 選択したノードのテキストも CF_TEXT の形式でクリップボードにコピーされ、ノードの階層全体を HIERSVR ネイティブ クリップボード形式でコピーされます。 リンク形式ではドキュメント名が必要なため、ドキュメントの保存が必須です。 Finally, in the client application, click EditPaste Link (or click Paste Link on the Edit Paste Special menu). リンク クライアント ドキュメント内] をクリックする前に編集コピー 選択したノードとして表示されます。 また、四角形も表示されます。

階層ダイアグラムをクライアント ドキュメントに埋め込むには、オブジェクトをリンクするため、上記のようなクリップボード プロシージャを使用するまたはクライアント アプリケーションで [オブジェクトの作成と貼り付け をクリックします。 クリップボード プロシージャを選択すると、クライアント アプリケーションで [ペースト リンクの編集の ではなく、編集の貼り付けの を使用します。 選択したノード以下のサブ階層だけが、クライアント ドキュメントに埋め込まれます。

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

ビジュアル編集サーバー

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

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

  • メンバー変数COleTemplateServerm_server HIERSVR のアプリケーション クラスとして格納する オブジェクト。

  • HIERSVR CServerDoc クラスは、 COleServerDoc から派生します。

  • HIERSVR CServerItem クラスは、 COleServerItem から派生します。

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

Keywords

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

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

注意

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

参照

その他の技術情報

MFC サンプル