當一個連結項的源是另一個文檔的嵌入項時,則為了使嵌入項可以編輯,那個包容文檔必須被載入。由於這個原因,當用戶想要編輯連結項的源時,容器程式就必須能夠由另一個容器應用程式啟動。你的應用程式也必須使用COleTemplateServer類以使它在被其它的應用程式啟動時能夠創建文檔。
為了使你的容器應用程式成為一個連結容器,請從COleLinkingDoc派生出你的文檔類,而不是從 COleDocument派生。同處理其它任何OLE容器程式一樣,應用程式必須將自己的類設計為可存儲應用程式的本地數據以及嵌入或連結項。而且,你必須為保存你的本地數據設計數據結構。如果你為你的應用程式的本地數據定義了一個 CDocItem派生類,你就可以使用由COleDocument定義的界面來保存你的本地數據以及OLE數據。
為了使你的應用程式能夠被另一個容器程式啟動,請定義一個COleTemplateServer對象作為你的應用程式的CWinApp派生類的成員。
class COleClientApp : public CWinApp
{
// ...
protected:
COleTemplateServer m_server;
// ...
};
在你的CWinApp派生類的成員函式InitInstance中,創建一個文檔模板並指定你的COleLinkingDoc派生類為一個文檔類:
// CMainDoc is derived from COleLinkingDoc
CMultiDocTemplate* pDocTemplate = new CMultiDocTemplate( IDR_OCLIENTTYPE,
RUNTIME_CLASS(CMainDoc),
RUNTIME_CLASS(CSplitFrame),
RUNTIME_CLASS(CMainView)
);
pDocTemplate->SetContainerInfo( IDR_OCLIENTTYPE_CNTR_IP);
AddDocTemplate(pDocTemplate);
通過調用COleTemplateServer對象的ConnectTemplate成員函式,將此COleTemplateServer對象連線到你的文檔模板,並通過調用COleTemplateServer::RegisterAll函式向OLE系統註冊所有的類對象。
m_server.ConnectTemplate(clsid, pDocTemplate, FALSE);
COleTemplateServer::RegisterAll();
CWinApp派生類的定義和InitInstance函式的示例,請參見MFC示例OCLIENT中的OCLIENT.H和OCLIENT.CPP。
如果要獲取有關使用COleLinkingDoc的更多信息,請參見“Visual C++程式設計師指南”一書中的文章“容器:實現一個容器”。
#include
請參閱: CDocTemplate
COleLinkingDoc類成員
構造
COleLinkingDoc | 構造一個COleLinkingDoc對象 |
操作
可重載
OnFindEmbeddedItem | 查找指定的嵌入項 |
OnGetLinkedItem | 查找指定的連結項 |