HIERSVR 範例:示範伺服器應用程式與 OLE 拖放
更新:2007 年 11 月
HIERSVR 範例是視覺化編輯伺服器應用程式中的一個範例,這個應用程式不但可支援連結的物件,還可以支援就地編輯的物件。此外,這種「全」伺服器的應用程式也可以直接開啟和儲存檔案。HIERSVR 物件是一個多層級的階層架構圖表 (Diagram),階層架構中的每個節點都包含由矩形或其他形狀圍繞的文字。HIERSVR 除了會說明伺服器的功能,也會說明 OLE 拖放和複製到剪貼簿的方式。
安全性注意事項: |
---|
這個程式碼範例僅供概念說明之用,同時因為範例中的程式碼撰寫並沒有周全的顧及所有安全性問題,所以本範例不適用於實際執行的應用程式或網站中。如果使用者擅自將範例程式碼用於其他意圖而導致連帶事件或重大損害時,Microsoft 將不承擔任何責任。 |
若要取得範例和指示以便進行安裝:
按一下 Visual Studio [說明] 功能表上的 [範例]。
如需詳細資訊,請參閱尋找範例檔案。
最新版的完整範例清單可從 Visual Studio 2008 範例網頁 (英文) 取得。
您也可以將範例置於電腦硬碟中。根據預設,範例和讀我檔案都會複製到 \Program Files\Visual Studio 9.0\Samples\ 下的資料夾中。對於所有的 Visual Studio Express 版,所有範例都可在線上找到。
建置和執行範例
若要建置並執行 HIERSVR 範例
開啟 hiersvr.sln 方案。
在 [建置] 功能表上,按一下 [建置]。
將 HIERSRV 當做獨立的應用程式執行一次,使其將自己登錄到系統中。
HIERSRV 圖表
文件類型或 HIERSVR 物件所編輯和顯示的,是一個單一繼承階層架構圖表。圖表中的每個節點,除了根節點,都只有一個父節點。每個父節點都可以有多個子節點。公司的組織圖就是一個階層架構圖表範例。MFC 類別的清單也是同樣的情況,因為它們不會使用 C++ 多層繼承。Mfcclass.hie 也是 HIERSVR 文件的一個範例。
階層架構的每個節點都會有最小的屬性集。
描述:包含最多到 30 個字元的文字。
形狀:圍繞文字矩形、圓角矩形或橢圓矩形的矩形樣式。
項目索引鍵連結 (選擇項):參考連結的項目時所使用的名稱。如果沒有指定,項目索引鍵會依預設連結至描述字串。當您在用戶端應用程式中使用 [編輯] 功能表的 [連結] 命令檢視這個連結時,就會看到這個名稱。
建立 HIERSVR 圖表
新的 HIERSVR 圖表會從含有「根節點」文字的單一節點開始。若要加入節點,請先按一下該節點的父節點來選取之。接著在 [編輯] 功能表上按一下 [加入節點]。在 [加入節點] 對話方塊中,指定之前所述的三個屬性。若要變更節點的屬性,請按一下該節點來加以選取,然後按一下 [變更節點]。若要移動節點,請按一下該節點再將它拖曳到新的位置。
HIERSVR 將會以下面所述的文字檔案格式來匯入階層架構資訊:每一行中的文字 (由換行符號分隔) 就是節點的「描述」。文字之前的定位字元數目是表示節點在階層架構中的層級。在 HIERSVR 範例的目錄中,Mfcclass.txt 是 Mfcclass.hie 的文字匯入檔,即原生 (Native) HIERSVR 檔案。
若要將階層架構圖表連接至用戶端文件,您必須先在 HIERSVR 中儲存檔案。然後,使用 [編輯] 功能表的 [複製] 選取要複製的節點。這樣就可以將連結複製到剪貼簿中。選取之節點的文字也會以 CF_TEXT 格式複製到剪貼簿中,而節點的整個階層架構也會以原生 HIERSVR 剪貼簿格式進行複製。這個時候需要儲存文件,因為連結格式需要用到文件名稱。最後,在用戶端應用程式的 [編輯] 功能表中,按一下 [貼上連結] (或是在 [編輯] 功能表的 [選擇性貼上] 中,按一下 [貼上連結])。連結會在用戶端文件中顯示為與您在按一下 [複製] ([編輯] 功能表) 之前所選取之節點一樣的節點。此時也會顯示矩形。
若要將階層架構圖表嵌入至用戶端文件,您可以使用剪貼簿程序 (與上述程序類似) 來連結物件,或是在用戶端應用程式中按一下 [插入新物件]。如果您選擇使用剪貼簿程序,請在用戶端應用程式的 [編輯] 功能表中,選擇使用 [貼上],而不要使用 [貼上連結]。只有開始於選取之節點的子階層架構會嵌入至用戶端文件中。
不論您要連結或嵌入圖表,用戶端應用程式視窗中都只會顯示上層的選取節點。若要查看其餘的圖表,您需要從用戶端應用程式中按兩下該項目來啟動 HIERSVR。
視覺化編輯伺服程式
HIERSVR 會說明為了實作完整功能的視覺化編輯伺服器應用程式時所需要的衍生類別,並且說明某些需要其他程式碼的常見用戶端應用程式使用者介面。
用來實作視覺化編輯伺服器應用程式的三個架構類別將說明如下。
COleTemplateServer 物件,儲存為 HIERSVR 應用程式類別的 m_server 成員變數 (Member Variable)。
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++ 精靈、程式庫以及編譯器方面的變更,不過還是可以示範如何完成您要進行的工作。 |