ACTIVEDOC 範例:實作主動式文件伺服程式
更新:2007 年 11 月
ACTIVEDOC 範例示範如何實作主動式文件伺服程式 (Active Document Server)。本範例為您示範下列動作:
如何實作介面 IOleDocument 和 IOleDocumentView。
如何使用容器執行功能表合併。
如何在物件中實作工具列。
如何覆寫 IPersistStreamInit 方法 Load 和 Save 來執行自訂儲存和載入。
如何使用 CDialogImpl 來實作 [關於] 對話方塊。
如何將 Rich Text 編輯控制項子類別化。
安全性注意事項: |
---|
這個程式碼範例僅供概念說明之用,同時因為範例中的程式碼撰寫並沒有周全的顧及所有安全性問題,所以本範例不適用於實際執行的應用程式或網站中。如果使用者擅自將範例程式碼用於其他意圖而導致連帶事件或重大損害時,Microsoft 將不承擔任何責任。 |
若要取得範例和指示以便進行安裝:
按一下 Visual Studio [說明] 功能表上的 [範例]。
如需詳細資訊,請參閱尋找範例檔案。
最新版的完整範例清單可從 Visual Studio 2008 範例網頁 (英文) 取得。
您也可以將範例置於電腦硬碟中。根據預設,範例和讀我檔案都會複製到 \Program Files\Visual Studio 9.0\Samples\ 下的資料夾中。對於所有的 Visual Studio Express 版,所有範例都可在線上找到。
建置和執行範例
若要建置範例
開啟方案 ActiveDoc.sln。
在 [建置] 功能表中,按一下 [建置方案]。
若要使用 Internet Explorer 執行範例
在 Internet Explorer 中開啟 ActiveDoc.htm 或 ActiveDoc.AAA 產生的檔案 (若要開啟 ActiveDoc.AAA,請在提示您開啟此檔案時,按一下 [開啟] 按鈕)。
使用已經合併到 Internet Explorer 功能表列中的 [格式] 功能表,或是按一下工具列色彩來變更已輸入之文字的色彩。
若要使用 Microsoft Office Binder 來執行範例
執行 Microsoft Office Binder,並從 [區段] 功能表中,按一下 [加入]。
選取標記為 "ActiveDoc Class" 的圖示,然後按一下 [確定]。
您應會看到內嵌在 Office 文件夾中的物件。請注意,功能表已經合併,並且會顯示 ActiveDoc 的工具列。您可輸入文字並且使用功能表和工具列按鈕來變更已輸入之文字的色彩。
範例檔案
這個範例包括下列主要檔案:
ActiveCtl.h
ActiveCtl.cpp -- 會實作 CActiveDoc,代表整個 ActiveDoc 物件。
OleDocument.h -- 會包含 IOleDocument 和 IOleDocumentView 介面的實作。
Toolbar.h -- 會包含有助於工具列實作的 CToolbar。
關鍵字
本範例使用下列關鍵字:
ActiveXDocActivate; ALT_MSG_MAP; ATLASSERT; ATLTRACE; BEGIN_COM_MAP; BEGIN_MSG_MAP; BEGIN_OBJECT_MAP; BEGIN_PROPERTY_MAP; BEGIN_TOOLBAR_MAP; CAboutDlg::DoModal; CanInPlaceActivate; CComCoClass; CComControl; CComModule::GetClassObject; CComModule::GetLockCount; CComModule::Init; CComModule::RegisterServer; CComModule::Term; CComModule::UnregisterServer; CComObjectRoot; CComObjectRootEx::InternalQueryInterface; CComPtr; CHARFORMAT; CMenu; COM_INTERFACE_ENTRY; COM_INTERFACE_ENTRY_IMPL; COMMAND_ID_HANDLER; COMMAND_RANGE_HANDLER; CreateMenu; CreateRTFWindow; CreateToolbar; CreateWindowEx; CToolbar; CWindow::DestroyWindow; CWindow::ModifyStyle; CWindow::SetFocus; CWindow::SetParent; CWindow::SetWindowPos; DECLARE_REGISTRY_RESOURCEID; DestroyMenu; DestroyToolbar; DisableThreadLibraryCalls; DllMain; DoesVerbUIActivate; EDITSTREAM::dwCookie; EDITSTREAM::dwError; EDITSTREAM::pfnCallback; Ellipse; END_COM_MAP; END_MSG_MAP; END_OBJECT_MAP; END_PROPERTY_MAP; END_TOOLBAR_MAP; EndDialog; ExtTextOut; FreeLibrary; GetMenuItemCount; GetMenuItemID; GetMenuState; GetMenuString; GetResourceInstance; GetStockObject; GetSubMenu; GetTextMetrics; GetWindow; GetWindowContext; GetWindowRect; HDC; hdcDraw;; IDataObjectImpl; IDispatchImpl; InitCommonControls; InlineIsEqualGUID; InPlaceDeactivate; InPlaceMenuCreate; InPlaceMenuDestroy; InsertMenu; InterfaceSupportsErrorInfo; InternalQueryInterface; IOleControlImpl; IOleDocument::GetDocMiscStatus; IOleDocumentImpl; IOleDocumentView::ApplyViewState; IOleDocumentView::SetInPlaceSite; IOleDocumentViewImpl; IOleInPlaceActiveObjectImpl; IOleInPlaceFrame* pFrame;; IOleInPlaceFrame::InsertMenus; IOleInPlaceFrame::Release; IOleInPlaceFrame::SetMenu; IOleInPlaceObjectWindowlessImpl; IOLEInPlaceSite::GetWindowContext; IOleObjectImpl; IPersistStorageImpl; IPersistStreamInitImpl; IProvideClassInfo2Impl; IQuickActivateImpl; ISupportErrorImpl; IViewObjectExImpl; LoadLibrary; LoadMenu; LoadString; MAKEINTRESOURCE; MergeMenus; MESSAGE_HANDLER; NOTIFY_CODE_HANDLER; OBJECT_ENTRY; OleCreateMenuDescriptor; OLEINPLACEFRAMEINFO; OnInPlaceActivate; OnUIActivate; prcBounds; RECT rcPos, rcClip;; RemoveMenu; SelectObject; SendMessage; SetActiveObject; SetBkMode; SetBorderSpace; SetControlFocus; SetFocus; SetInPlaceSite; SetMenu; SetObjectRects; SetTextColor; ShowObject; ShowWindow; UIActivate; UIDeactivate; UnmergeMenus; ZeroMemory