HIERSVR 示例:演示具有 OLE 拖放功能的服务器应用程序

更新:2007 年 11 月

HIERSVR 示例是可视化编辑服务器应用程序的示例,它支持链接的对象以及就地编辑的对象。此外,作为“完整的”服务器,该应用程序还可以直接打开和保存文件。HIERSVR 对象是多层的层次结构关系图,层次结构中的每一节点都是由矩形或其他形状环绕的文本组成的。除了阐释服务器功能外,HIERSVR 还阐释 OLE 拖放以及复制到剪贴板。

安全说明:

提供该示例代码是为了阐释一个概念,并不代表着最安全的编码实践,因此不应在应用程序或网站中使用该示例代码。对于超出本示例代码的预期用途以外的使用所造成的偶然或继发性损失,Microsoft 不承担任何责任。

获取示例和安装示例的说明:

  • 在 Visual Studio 的“帮助”菜单上,单击“示例”。

    有关更多信息,请参见定位示例文件

  • 示例的最新版本和完整列表可以从 Visual Studio 2008 Samples page(Visual Studio 2008 示例页面)联机获取。

  • 还可以在计算机的硬盘上查找示例。默认情况下,示例和自述文件将复制到 \Program Files\Visual Studio 9.0\Samples\ 下的文件夹中。对于 Visual Studio 速成版,所有示例都位于联机位置。

生成并运行示例

生成并运行 HIERSVR 示例

  1. 打开解决方案 hiersvr.sln。

  2. 在“生成”菜单中单击“生成”。

  3. 将 HIERSRV 作为独立的应用程序运行,以便它可以向系统注册其自身。

HIERSRV 关系图

HIERSVR 编辑和显示的文档或对象的类型是单继承层次结构关系图。关系图中的每一节点(根节点除外)都只有一个父节点。每一父级可以有多个子级。公司的组织结构图是层次结构关系图的一个示例。MFC 类的列表也是如此,原因是它们不使用 C++ 多重继承。Mfcclass.hie 作为 HIERSVR 文档示例包含在内。

层次结构中的每一节点都具有一组基本属性。

  • Description(说明)— 最多可包含 30 个字符的文本。

  • Shape(形状)— 环绕文本矩形的矩形、圆角矩形或椭圆矩形的样式。

  • Item Key Link(项关键字链接)(可选)— 用于引用链接项的名称。如果未指定,则项关键字链接默认为说明字符串。当使用客户端应用程序中的“Edit Links”(编辑链接)命令查看链接时,可见到该名称。

创建 HIERSVR 关系图

新的 HIERSVR 关系图是作为具有文本“Root node”(根节点)的单节点开始的。若要添加一个节点,首先选择其父节点,方法是单击该“Root node”节点。然后单击“Edit”(编辑)菜单上的“Add Node”(添加节点)。在“Add Node”(添加节点)对话框中,指定上述三个属性。若要更改节点的属性,通过鼠标单击来选择它,然后单击“Change Node”(更改节点)。若要移动一个节点,请单击它并拖到新位置。

HIERSVR 将从按如下所示设置格式的文本文件导入层次结构信息:每一行中的文本(由换行符分隔)是节点的说明。该文本前面的制表符的数目确定层次结构中该节点的级别。在 HIERSVR 示例目录中,Mfcclass.txt 是 Mfcclass.hie(本机 HIERSVR 文件)的文本导入文件。

若要将层次结构关系图链接到一个客户端文档,必须首先将该文件保存到 HIERSVR 中。然后使用“Edit”(编辑)->“Copy”(复制)选择要复制的节点。这将该链接复制到剪贴板。选定节点的文本也将以 CF_TEXT 格式被复制到剪贴板中,并且节点的整个层次结构都将以 HIERSVR 本机剪贴板格式被复制。保存文档是必需的,因为该链接格式要求文档名称。最后,在客户端应用程序中,单击“Edit”(编辑)->“Paste Link”(粘贴链接)(或者单击“Edit”(编辑)->“Paste Special”(选择性粘贴)菜单上的“Paste Link”(粘贴链接))。该链接将作为单击“Edit”(编辑)->“Copy”(复制)前选定的节点显示在客户端文档中。同时还将显示矩形。

若要将层次结构关系图嵌入到客户端文档中,可以使用与上述链接对象类似的剪贴板过程,或者单击客户端应用程序中的“Insert New Object”(插入新对象)。如果选择剪贴板过程,则在客户端应用程序中应使用“Edit”(编辑)->“Paste”(粘贴)而不是“Edit”(编辑)->“Paste Link”(粘贴链接)。在客户端文档中将只嵌入在所选节点起始的子层次结构。

无论是链接还是嵌入关系图,只有选定的最上层节点将显示在客户端应用程序窗口中。若要查看关系图的其余部分,将需要通过双击该项从客户端应用程序启动 HIERSVR。

可视化编辑服务器

HIERSVR 阐释实现完整功能的可视化编辑服务器应用程序所必需的类派生,并且还阐释一些要求附加代码的最常用的客户端应用程序用户界面。

以下阐释用于实现可视化编辑服务器应用程序的三个框架类。

  • COleTemplateServer 对象,作为成员变量 m_server 存储在 HIERSVR 的应用程序类中。

  • HIERSVR CServerDoc 类,从 COleServerDoc 派生。

  • HIERSVR CServerItem 类,从 COleServerItem 派生。

  • HIERSVR CInPlaceFrame 类,从 COleIPFrameWnd 派生,并且最初由应用程序向导创建。

关键字

此示例说明以下关键字:

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 示例