共用方式為


COleServerItem 類別

提供 OLE 項目的伺服器介面。

語法

class COleServerItem : public CDocItem

成員

受保護的建構函式

名稱 描述
COleServerItem::COleServerItem 建構 COleServerItem 物件。

公用方法

名稱 描述
COleServerItem::AddOtherClipboardData 將簡報和轉換格式放在物件中 COleDataSource
COleServerItem::CopyToClipboard 將專案複製到剪貼簿。
COleServerItem::D oDragDrop 執行拖放作業。
COleServerItem::GetClipboardData 取得用於數據傳輸的數據源(拖放或剪貼簿)。
COleServerItem::GetDocument 傳回包含專案的伺服器檔。
COleServerItem::GetEmbedSourceData 取得 OLE 專案的CF_EMBEDSOURCE數據。
COleServerItem::GetItemName 傳回項目的名稱。 僅用於連結專案。
COleServerItem::GetLinkSourceData 取得 OLE 專案的CF_LINKSOURCE數據。
COleServerItem::GetObjectDescriptorData 取得 OLE 專案的CF_OBJECTDESCRIPTOR數據。
COleServerItem::IsConnected 指出專案目前是否附加至使用中容器。
COleServerItem::IsLinkedItem 指出專案是否代表連結的 OLE 專案。
COleServerItem::NotifyChanged 使用自動連結更新來更新所有容器。
COleServerItem::OnDoVerb 呼叫 以執行動詞。
COleServerItem::OnDraw 當容器要求繪製專案時呼叫;需要實作。
COleServerItem::OnDrawEx 針對特製化項目繪圖呼叫。
COleServerItem::OnGetClipboardData 由架構呼叫以取得要複製到剪貼簿的數據。
COleServerItem::OnGetExtent 由架構呼叫以擷取 OLE 專案的大小。
COleServerItem::OnInitFromData 由架構呼叫,以使用指定的數據傳輸對象內容初始化 OLE 專案。
COleServerItem::OnQueryUpdateItems 呼叫 以判斷是否有任何連結的專案需要更新。
COleServerItem::OnRenderData 擷取數據做為延遲轉譯的一部分。
COleServerItem::OnRenderFileData 將數據擷取至 CFile 物件,做為延遲轉譯的一部分。
COleServerItem::OnRenderGlobalData 將數據擷取到 HGLOBAL 作為延遲轉譯的一部分。
COleServerItem::OnSetColorScheme 呼叫 以設定專案的色彩配置。
COleServerItem::OnSetData 呼叫 以設定項目的數據。
COleServerItem::OnSetExtent 由架構呼叫以設定 OLE 專案的大小。
COleServerItem::OnUpdate 變更專案所屬檔的某些部分時呼叫。
COleServerItem::OnUpdateItems 呼叫 以更新伺服器檔中所有項目的簡報快取。
COleServerItem::SetItemName 設定項目的名稱。 僅用於連結專案。

受保護的方法

名稱 描述
COleServerItem::GetDataSource 取得用來儲存轉換格式的物件。
COleServerItem::OnHide 由架構呼叫以隱藏 OLE 專案。
COleServerItem::OnOpen 由架構呼叫,以在自己的最上層視窗中顯示 OLE 專案。
COleServerItem::OnShow 當容器要求顯示專案時呼叫。

公用資料成員

名稱 描述
COleServerItem::m_sizeExtent 通知伺服器 OLE 專案有多少可見。

備註

連結的專案可以代表部分或所有伺服器檔。 內嵌專案一律代表整個伺服器檔。

類別 COleServerItem 會定義數個可覆寫的成員函式,這些函式是由 OLE 系統動態連結庫 (DLL) 所呼叫,通常是為了回應來自容器應用程式的要求。 這些成員函式可讓容器應用程式以各種方式間接操作專案,例如顯示專案、執行動詞或以各種格式擷取其數據。

若要使用 COleServerItem,請從它衍生類別,並實 作 OnDrawSerialize 成員函式 。 函 OnDraw 式會提供專案的元檔表示法,以便在容器應用程式開啟複合檔時顯示該專案。 的函SerializeCObject式會提供專案的原生表示法,允許在伺服器和容器應用程式之間傳輸內嵌專案。 OnGetExtent 會將專案的自然大小提供給容器,讓容器能夠調整專案的大小。

如需伺服器和相關主題的詳細資訊,請參閱<容器:進階功能>一文中的<伺服器:實作伺服器>和<建立容器/伺服器應用程式>一文。

繼承階層架構

CObject

CCmdTarget

CDocItem

COleServerItem

需求

標頭: afxole.h

COleServerItem::AddOtherClipboardData

呼叫此函式,將 OLE 專案的簡報和轉換格式放在指定的 COleDataSource 物件中。

void AddOtherClipboardData(COleDataSource* pDataSource);

參數

pDataSource
COleDataSource要放置數據之物件的指標。

備註

您必須實 作 OnDraw 成員函式,才能提供專案的簡報格式(元檔圖片)。 若要支援其他轉換格式,請使用 GetDataSource 所傳回的 COleDataSource 物件進行註冊,並覆寫 OnRenderData 成員函式,以您想要支援的格式提供數據。

COleServerItem::COleServerItem

COleServerItem建構 物件,並將它加入至伺服器檔的檔專案集合。

COleServerItem(
    COleServerDoc* pServerDoc,
    BOOL bAutoDelete);

參數

pServerDoc
將包含新項目的文件的指標。

bAutoDelete
旗標,指出當發行對象的連結時,是否可以刪除物件。 如果 COleServerItem 對像是檔案資料中必須刪除的整數部分,請將此設定為 FALSE。 如果對像是用來識別檔資料中可由架構刪除的範圍,請將此物件設定為 TRUE。

COleServerItem::CopyToClipboard

呼叫此函式,將 OLE 專案複製到剪貼簿。

void CopyToClipboard(BOOL bIncludeLink = FALSE);

參數

bIncludeLink
如果應該將連結數據複製到剪貼簿,請將此設定為TRUE。 如果您的伺服器應用程式不支援連結,請將此設定為 FALSE。

備註

函式會使用 OnGetClipboardData 成員函式來建立 COleDataSource 物件,其中包含所支援格式的 OLE 項目數據。 然後,函式會使用 COleDataSource::SetClipboard 函式,將物件放在COleDataSource剪貼簿上。 COleDataSource物件包含專案的原生數據及其以CF_METAFILEPICT格式表示,以及您選擇的任何轉換格式數據。 您必須已實 作 SerializeOnDraw ,此成員函式才能運作。

COleServerItem::D oDragDrop

DoDragDrop呼叫成員函式以執行拖放作業。

DROPEFFECT DoDragDrop(
    LPCRECT lpRectItem,
    CPoint ptOffset,
    BOOL bIncludeLink = FALSE,
    DWORD dwEffects = DROPEFFECT_COPY | DROPEFFECT_MOVE,
    LPCRECT lpRectStartDrag = NULL);

參數

lpRectItem
螢幕上的專案矩形,以像素為單位,相對於工作區。

ptOffset
lpItemRect 的位移,其中滑鼠位置在拖曳時的位置。

bIncludeLink
如果應該將連結數據複製到剪貼簿,請將此設定為TRUE。 如果您的應用程式不支援連結,請將它設定為 FALSE。

dwEffects
決定拖曳來源在拖曳作業中允許的效果(複製、移動和鏈接的組合)。

lpRectStartDrag
定義拖曳實際開始位置的矩形指標。 如需詳細資訊,請參閱接下來的<備註>一節。

傳回值

DROPEFFECT 列舉中的值。 如果DROPEFFECT_MOVE,則應該移除原始數據。

備註

拖放作業不會立即啟動。 它會等到滑鼠游標離開 lpRectStartDrag指定的矩形,或直到經過指定的毫秒數為止。 如果 lpRectStartDrag 為 NULL,則會使用預設矩形,以便在滑鼠游標移動一個像素時開始拖曳。

延遲時間是由登錄機碼設定所指定。 您可以呼叫 CWinApp::WriteProfileStringCWinApp::WriteProfileInt 來變更延遲時間。 如果您未指定延遲時間,則會使用預設值 200 毫秒。 拖曳延遲時間會儲存如下:

  • Windows NT 拖曳延遲時間儲存在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\NT\CurrentVersion\IniFileMapping\win.ini\Windows\DragDelay 中。

  • Windows 3.x 拖曳延遲時間會儲存在 WIN 中。INI 檔案,位於 [Windows}] 區段底下。

  • Windows 95/98 拖曳延遲時間會儲存在快取版本的 WIN 中。INI.

如需拖曳延遲資訊儲存在登錄或 中之方式的詳細資訊。INI 檔案,請參閱 Windows SDK 中的 WriteProfileString

COleServerItem::GetClipboardData

呼叫此函式,以填入指定的 COleDataSource 物件,如果您呼叫 CopyToClipboard ,則會將複製到剪貼簿的所有數據填入 (如果您呼叫 DoDragDrop,也會傳輸相同的數據)。

void GetClipboardData(
    COleDataSource* pDataSource,
    BOOL bIncludeLink = FALSE,
    LPPOINT lpOffset = NULL,
    LPSIZE lpSize = NULL);

參數

pDataSource
物件指標, COleDataSource 該物件將接收所有支援格式的 OLE 項目數據。

bIncludeLink
如果應該將連結數據複製到剪貼簿,則為TRUE。 如果伺服器應用程式不支持連結,則為 FALSE。

lpOffset
滑鼠游標的位移,以像素為單位,從物件的原點移。

lpSize
以像素為單位的物件大小。

備註

此函式會呼叫 GetEmbedSourceData 成員函式來取得 OLE 專案的原生數據,並呼叫 AddOtherClipboardData 成員函式來取得簡報格式和任何支援的轉換格式。 如果 bIncludeLink 為 TRUE,函式也會呼叫 GetLinkSourceData 來取得專案的鏈接數據。

如果您想要在 所提供的CopyToClipboard格式之前或之後,將格式放在 物件中COleDataSource,請覆寫此函式。

COleServerItem::GetDataSource

呼叫此函式以取得 COleDataSource 物件,以用來儲存伺服器應用程式支援的轉換格式。

COleDataSource* GetDataSource();

傳回值

物件指標 COleDataSource ,用來儲存轉換格式。

備註

如果您想要讓伺服器應用程式在資料傳輸作業期間以各種格式提供數據,請使用此函式所傳回的物件註冊這些格式 COleDataSource 。 例如,如果您想要為剪貼簿或拖放作業提供 OLE 專案的CF_TEXT表示法,您會向 COleDataSource 這個函式傳回的物件註冊格式,然後覆寫 OnRenderXxxData 成員函式以提供數據。

COleServerItem::GetDocument

呼叫此函式,以取得包含項目的文件指標。

COleServerDoc* GetDocument() const;

傳回值

包含專案的檔的指標;如果專案不是檔的一部分,則為 NULL。

備註

這可讓您存取您傳遞為建構函式自變數 COleServerItem 的伺服器檔。

COleServerItem::GetEmbedSourceData

呼叫此函式以取得 OLE 專案的CF_EMBEDSOURCE數據。

void GetEmbedSourceData(LPSTGMEDIUM lpStgMedium);

參數

lpStgMedium
STGMEDIUM 結構的指標,該結構將接收 OLE 專案的CF_EMBEDSOURCE數據。

備註

此格式包含專案的原生數據。 您必須已實作成員函式, Serialize 此函式才能正常運作。

然後,您可以使用 COleDataSource::CacheData 將結果新增至數據源。 COleServerItem::OnGetClipboardData 會自動呼叫此函式。

如需詳細資訊,請參閱 Windows SDK 中的 STGMEDIUM

COleServerItem::GetItemName

呼叫此函式以取得項目的名稱。

const CString& GetItemName() const;

傳回值

項目的名稱。

備註

您通常只會針對連結的專案呼叫此函式。

COleServerItem::GetLinkSourceData

呼叫此函式以取得 OLE 專案的CF_LINKSOURCE數據。

BOOL GetLinkSourceData(LPSTGMEDIUM lpStgMedium);

參數

lpStgMedium
STGMEDIUM 結構的指標,該結構將接收 OLE 專案的CF_LINKSOURCE數據。

傳回值

如果成功則為非零;否則為 0。

備註

此格式包含描述 OLE 項目類型的 CLSID,以及尋找包含 OLE 專案的檔案所需的資訊。

然後,您可以使用 COleDataSource::CacheData 將結果新增至數據源。 OnGetClipboardData 會自動呼叫此函式。

如需詳細資訊,請參閱 Windows SDK 中的 STGMEDIUM

COleServerItem::GetObjectDescriptorData

呼叫此函式以取得 OLE 專案的CF_OBJECTDESCRIPTOR數據。

void GetObjectDescriptorData(
    LPPOINT lpOffset,
    LPSIZE lpSize,
    LPSTGMEDIUM lpStgMedium);

參數

lpOffset
從 OLE 專案左上角按下滑鼠的位移。 可以是 NULL。

lpSize
OLE 專案的大小。 可以是 NULL。

lpStgMedium
STGMEDIUM 結構的指標,該結構將接收 OLE 專案的CF_OBJECTDESCRIPTOR數據。

備註

信息會STGMEDIUM複製到 lpStgMedium指向的結構中。 此格式包含 [貼上特殊] 對話框所需的資訊。

如需詳細資訊,請參閱 Windows SDK 中的 STGMEDIUM

COleServerItem::IsConnected

呼叫此函式以查看 OLE 專案是否已連接。

BOOL IsConnected() const;

傳回值

如果專案已連線,則為非零;否則為 0。

備註

如果一或多個容器具有項目的參考,則 OLE 專案會被視為已連線。 如果項目的參考計數大於 0,或它是內嵌專案,則會連接專案。

COleServerItem::IsLinkedItem

呼叫此函式以查看 OLE 專案是否為連結專案。

BOOL IsLinkedItem() const;

傳回值

如果專案是連結的專案,則為非零;否則為 0。

備註

如果專案有效且未在檔的內嵌專案清單中傳回,則項目會連結。 連結的專案可能或可能未連線到容器。

連結和內嵌專案通常會使用相同的類別。 IsLinkedItem 可讓您讓鏈接項目的行為與內嵌專案不同,雖然程式代碼經常發生多次。

COleServerItem::m_sizeExtent

這個成員會告訴伺服器容器檔中有多少物件可見。

CSize m_sizeExtent;

備註

OnSetExtent 的預設實作會設定這個成員。

COleServerItem::NotifyChanged

在連結的專案變更之後呼叫此函式。

void NotifyChanged(DVASPECT nDrawAspect = DVASPECT_CONTENT);

參數

nDrawAspect
DVASPECT 列舉中的值,指出 OLE 專案的哪個層面已變更。 這個參數的值可以是下列任何一個:

  • DVASPECT_CONTENT Item 是以可顯示為容器內嵌物件的方式表示。

  • DVASPECT_THUMBNAIL專案會以「縮圖」表示呈現,以便顯示在瀏覽工具中。

  • DVASPECT_ICON Item 是由圖示表示。

  • DVASPECT_DOCPRINT Item 會以 [檔案] 選單中的 [列印] 命令列印時一樣呈現。

備註

如果容器項目連結至具有自動連結的檔,則會更新專案以反映變更。 在使用 Microsoft Foundation Class Library 撰寫的容器應用程式中, COleClientItem::OnChange 會以回應方式呼叫。

COleServerItem::OnDoVerb

由架構呼叫以執行指定的動詞命令。

virtual void OnDoVerb(LONG iVerb);

參數

iVerb
指定要執行的動詞。 它可以是下列任一項:

意義 符號
0 主動詞命令 OLEIVERB_PRIMARY
1 次要動詞 (無)
- 1 顯示要編輯的專案 OLEIVERB_SHOW
-2 在不同的視窗中編輯專案 OLEIVERB_OPEN
-3 隱藏專案 OLEIVERB_HIDE

-1 值通常是另一個動詞的別名。 如果不支持開啟編輯,-2 的效果與 -1 相同。 如需其他值,請參閱 Windows SDK 中的 IOleObject::D oVerb

備註

如果容器應用程式是以 Microsoft Foundation Class Library 撰寫,則會在呼叫對應COleClientItem物件的 COleClientItem::Activate 成員函式時呼叫此函式。 如果指定主要動詞或OLEIVERB_SHOW,則默認實作會呼叫 OnShow 成員函式、指定次要動詞或OLEIVERB_OPEN的 OnOpen,如果指定了OLEIVERB_HIDE則為 OnHide。 如果 iVerb 不是上面所列的其中一個動詞,則預設實作會呼叫 OnShow

如果您的主要動詞未顯示專案,請覆寫此函式。 例如,如果專案是錄音,且其主要動詞是 Play,則不需要顯示伺服器應用程式來播放專案。

如需詳細資訊,請參閱 Windows SDK 中的 IOleObject::D oVerb

COleServerItem::OnDraw

由架構呼叫,將 OLE 專案轉譯成元檔。

virtual BOOL OnDraw(
    CDC* pDC,
    CSize& rSize) = 0;

參數

pDC
要在其中繪製專案的 CDC 物件的指標。 顯示內容會自動連線到屬性顯示內容,因此您可以呼叫屬性函式,不過這樣做會使元檔裝置特定。

rSize
大小,以 HIMETRIC 單位為單位,用來繪製元檔。

傳回值

如果成功繪製專案,則為非零;否則為 0。

備註

OLE 專案的元檔表示法是用來在容器應用程式中顯示專案。 如果容器應用程式是以 Microsoft Foundation Class Library 撰寫,則對應 COleClientItem 物件的 Draw 成員函式會使用元檔。 沒有預設的實作。 您必須覆寫此函式,才能將項目繪製到指定的裝置內容中。

COleServerItem::OnDrawEx

由架構針對所有繪圖呼叫。

virtual BOOL OnDrawEx(
    CDC* pDC,
    DVASPECT nDrawAspect,
    CSize& rSize);

參數

pDC
要在其中繪製專案的 CDC 物件的指標。 DC 會自動連線到屬性DC,因此您可以呼叫屬性函式,不過這樣做會使元檔裝置特定。

nDrawAspect
DVASPECT 列舉中的值。 這個參數的值可以是下列任何一個:

  • DVASPECT_CONTENT Item 是以可顯示為容器內嵌物件的方式表示。

  • DVASPECT_THUMBNAIL專案會以「縮圖」表示呈現,以便顯示在瀏覽工具中。

  • DVASPECT_ICON Item 是由圖示表示。

  • DVASPECT_DOCPRINT Item 會以 [檔案] 選單中的 [列印] 命令列印時一樣呈現。

rSize
HIMETRIC 單位中的專案大小。

傳回值

如果成功繪製專案,則為非零;否則為 0。

備註

當 DVASPECT 等於DVASPECT_CONTENT時,預設實作會呼叫 OnDraw ;否則會失敗。

覆寫此函式,為DVASPECT_CONTENT以外的層面提供簡報數據,例如DVASPECT_ICON或DVASPECT_THUMBNAIL。

COleServerItem::OnGetClipboardData

由架構呼叫,以取得COleDataSource物件,其中包含呼叫 CopyToClipboard 成員函式時,將放置於剪貼簿上的所有數據。

virtual COleDataSource* OnGetClipboardData(
    BOOL bIncludeLink,
    LPPOINT lpOffset,
    LPSIZE lpSize);

參數

bIncludeLink
如果應該將連結數據複製到剪貼簿,請將此設定為TRUE。 如果您的伺服器應用程式不支援連結,請將此設定為 FALSE。

lpOffset
滑鼠游標的位移,以像素為單位的物件原點。

lpSize
以像素為單位的物件大小。

傳回值

包含剪貼簿數據的 COleDataSource 物件的指標

備註

此函式的預設實作會呼叫 GetClipboardData

COleServerItem::OnGetExtent

由架構呼叫以擷取 OLE 專案之 HIMETRIC 單位的大小。

virtual BOOL OnGetExtent(
    DVASPECT nDrawAspect,
    CSize& rSize);

參數

nDrawAspect
指定要擷取界限的 OLE 項目層面。 這個參數的值可以是下列任何一個:

  • DVASPECT_CONTENT Item 是以可顯示為容器內嵌物件的方式表示。

  • DVASPECT_THUMBNAIL專案會以「縮圖」表示呈現,以便顯示在瀏覽工具中。

  • DVASPECT_ICON Item 是由圖示表示。

  • DVASPECT_DOCPRINT Item 會以 [檔案] 選單中的 [列印] 命令列印時一樣呈現。

rSize
CSize將接收 OLE 專案大小的 物件參考。

傳回值

如果成功則為非零;否則為 0。

備註

如果容器應用程式是以 Microsoft Foundation Class Library 撰寫,則會在呼叫對應COleClientItem物件的 GetExtent 成員函式時呼叫此函式。 預設實作不做任何動作。 您必須自行實作。 如果您想要在處理 OLE 專案大小的要求時執行特殊處理,請覆寫此函式。

COleServerItem::OnHide

由架構呼叫以隱藏 OLE 專案。

virtual void OnHide();

備註

預設會呼叫 COleServerDoc::OnShowDocument( FALSE )。 函式也會通知容器 OLE 專案已隱藏。 如果您想要在隱藏 OLE 項目時執行特殊處理,請覆寫此函式。

COleServerItem::OnInitFromData

由架構呼叫,以使用 pDataObject 的內容初始化 OLE 專案。

virtual BOOL OnInitFromData(
    COleDataObject* pDataObject,
    BOOL bCreation);

參數

pDataObject
OLE 資料物件的指標,其中包含初始化 OLE 專案之各種格式的數據。

bCreation
如果呼叫 函式來初始化容器應用程式新建立的 OLE 專案,則為 TRUE。 如果呼叫 函式來取代現有 OLE 項目的內容,則為 FALSE。

傳回值

如果成功則為非零;否則為 0。

備註

如果 bCreation 為 TRUE,如果容器根據目前的選取範圍實作 Insert New Object,就會呼叫此函式。 建立新的 OLE 專案時,會使用選取的數據。 例如,在電子表格程式中選取單元格範圍,然後使用 [插入新物件] 根據選取範圍中的值來建立圖表。 預設實作不做任何動作。 覆寫此函式,從 pDataObject 提供的格式中選擇可接受的格式,並根據所提供的數據初始化 OLE 專案。 這是可覆寫的進階。

如需詳細資訊,請參閱 Windows SDK 中的 IOleObject::InitFromData

COleServerItem::OnOpen

由架構呼叫,以在伺服器應用程式的個別實例中顯示 OLE 專案,而不是就地顯示。

virtual void OnOpen();

備註

默認實作會啟動第一個框架視窗,其中顯示包含 OLE 項目的檔;如果應用程式是迷你伺服器,則預設實作會顯示主視窗。 函式也會通知容器 OLE 專案已開啟。

如果您想要在開啟 OLE 項目時執行特殊處理,請覆寫此函式。 這特別適用於您要在開啟連結時將選取範圍設定為連結的連結專案。

如需詳細資訊,請參閱 Windows SDK 中的 IOleClientSite::OnShowWindow

COleServerItem::OnQueryUpdateItems

由架構呼叫,以判斷目前伺服器檔中的任何連結專案是否過期。

virtual BOOL OnQueryUpdateItems();

傳回值

如果檔有需要更新的專案,則為非零;如果所有專案都是最新的,則為 0。

備註

如果專案源文檔已變更,但連結的專案尚未更新,以反映檔中的變更,則專案已過期。

COleServerItem::OnRenderData

由架構呼叫,以擷取指定格式的數據。

virtual BOOL OnRenderData(
    LPFORMATETC lpFormatEtc,
    LPSTGMEDIUM lpStgMedium);

參數

lpFormatEtc
指向 FORMATETC 結構,指定要求資訊的格式。

lpStgMedium
指向要傳回數據的 STGMEDIUM 結構。

傳回值

如果成功則為非零;否則為 0。

備註

指定的格式是先前使用DelayRenderDataDelayRenderFileData成員函式放置於物件中COleDataSource,以供延遲轉譯。 如果提供的儲存媒體是檔案或記憶體,則此函式的預設實作會分別呼叫 OnRenderFileDataOnRenderGlobalData。 如果未提供這兩種格式,則預設實作會傳回0,而且不會執行任何動作。

如果 lpStgMedium-tymed> 是TYMED_NULL,STGMEDIUM 應該配置並填滿,如 lpFormatEtc-tymed> 所指定。 如果未TYMED_NULL,STGMEDIUM 應該會填入數據。

這是可覆寫的進階。 覆寫此函式,以要求的格式和媒體提供您的數據。 視您的數據而定,您可能想要改為覆寫此函式的其他其中一個版本。 如果您的資料大小較小且大小固定,請覆寫 OnRenderGlobalData。 如果您的資料位於檔案中,或大小不一,請覆寫 OnRenderFileData

如需詳細資訊,請參閱 Windows SDK 中的 IDataObject::GetDataSTGMEDIUMFORMATETCTYMED

COleServerItem::OnRenderFileData

架構呼叫,以在儲存媒體為檔案時擷取指定格式的數據。

virtual BOOL OnRenderFileData(
    LPFORMATETC lpFormatEtc,
    CFile* pFile);

參數

lpFormatEtc
指向 FORMATETC 結構,指定要求資訊的格式。

pFile
CFile指向要轉譯數據的物件。

傳回值

如果成功則為非零;否則為 0。

備註

指定的格式是先前使用DelayRenderData成員函式在物件中COleDataSource放置的格式,以供延遲轉譯。 此函式的預設實作只會傳回 FALSE。

這是可覆寫的進階。 覆寫此函式,以要求的格式和媒體提供您的數據。 視您的數據而定,您可能會想要改為覆寫此函式的其他其中一個版本。 如果您想要處理多個儲存媒體,請覆寫 OnRenderData。 如果您的數據位於檔案中,或大小不一,請覆寫 OnRenderFileData

如需詳細資訊,請參閱 Windows SDK 中的 IDataObject::GetDataFORMATETC

COleServerItem::OnRenderGlobalData

當指定的儲存媒體是全域記憶體時,由架構呼叫以指定格式擷取數據。

virtual BOOL OnRenderGlobalData(
    LPFORMATETC lpFormatEtc,
    HGLOBAL* phGlobal);

參數

lpFormatEtc
指向 FORMATETC 結構,指定要求資訊的格式。

phGlobal
指向要傳回數據之全域記憶體的句柄。 如果未配置記憶體,此參數可以是 NULL。

傳回值

如果成功則為非零;否則為 0。

備註

指定的格式是先前使用DelayRenderData成員函式在物件中COleDataSource放置的格式,以供延遲轉譯。 此函式的預設實作只會傳回 FALSE。

如果 phGlobal 為 NULL,則應該在 phGlobal 中 配置並傳回新的 HGLOBAL。 否則,phGlobal 所 指定的 HGLOBAL 應該填入數據。 放置於 HGLOBAL 的數據量不得超過記憶體區塊的目前大小。 此外,區塊無法重新配置為較大的大小。

這是可覆寫的進階。 覆寫此函式,以要求的格式和媒體提供您的數據。 視您的數據而定,您可能想要改為覆寫此函式的其他其中一個版本。 如果您想要處理多個儲存媒體,請覆寫 OnRenderData。 如果您的數據位於檔案中,或大小不一,請覆寫 OnRenderFileData

如需詳細資訊,請參閱 Windows SDK 中的 IDataObject::GetDataFORMATETC

COleServerItem::OnSetColorScheme

由架構呼叫,以指定編輯 OLE 專案時要使用的調色盤。

virtual BOOL OnSetColorScheme(const LOGPALETTE* lpLogPalette);

參數

lpLogPalette
Windows LOGPALETTE 結構的指標。

傳回值

如果使用調色盤,則為非零;否則為 0。

備註

如果使用 Microsoft Foundation Class Library 撰寫容器應用程式,則會在呼叫對應COleClientItem物件的 IOleObject::SetColorScheme 函式時呼叫此函式。 默認實作會傳回 FALSE。 如果您想要使用建議的調色盤,請覆寫此函式。 伺服器應用程式不需要使用建議的調色盤。

如需詳細資訊,請參閱 Windows SDK 中的 IOleObject::SetColorScheme

COleServerItem::OnSetData

由架構呼叫,以將 OLE 項目的數據取代為指定的數據。

virtual BOOL OnSetData(
    LPFORMATETC lpFormatEtc,
    LPSTGMEDIUM lpStgMedium,
    BOOL bRelease);

參數

lpFormatEtc
指定數據格式之 FORMATETC 結構的指標。

lpStgMedium
數據所在的 STGMEDIUM 結構的指標。

bRelease
指出完成函式呼叫之後,誰擁有儲存媒體的擁有權。 呼叫端決定誰負責釋放代表儲存媒體配置的資源。 呼叫端藉由設定 bRelease 來執行此工作。 如果 bRelease 為非零,伺服器專案會取得擁有權,在完成使用媒體時釋放媒體。 當 bRelease 為 0 時,呼叫端會保留擁有權,而伺服器專案只能在通話期間使用儲存媒體。

傳回值

如果成功則為非零;否則為 0。

備註

在成功取得數據之前,伺服器專案不會取得數據的擁有權。 也就是說,如果傳回 0,則不會取得擁有權。 如果數據源取得擁有權,它會藉由呼叫 ReleaseStgMedium 函式釋放儲存媒體。

預設實作不做任何動作。 覆寫此函式,以將 OLE 項目的數據取代為指定的數據。 這是可覆寫的進階。

如需詳細資訊,請參閱 Windows SDK 中的 STGMEDIUMFORMATETCReleaseStgMedium

COleServerItem::OnSetExtent

由架構呼叫,告知 OLE 專案在容器檔中有多少空間可供它使用。

virtual BOOL OnSetExtent(
    DVASPECT nDrawAspect,
    const CSize& size);

參數

nDrawAspect
指定正在指定界限之 OLE 項目的層面。 這個參數的值可以是下列任何一個:

  • DVASPECT_CONTENT Item 是以可顯示為容器內嵌物件的方式表示。

  • DVASPECT_THUMBNAIL專案會以「縮圖」表示呈現,以便顯示在瀏覽工具中。

  • DVASPECT_ICON Item 是由圖示表示。

  • DVASPECT_DOCPRINT Item 會以 [檔案] 選單中的 [列印] 命令列印時一樣呈現。

size
CSize 結構,指定 OLE 專案的新大小。

傳回值

如果成功則為非零;否則為 0。

備註

如果容器應用程式是以 Microsoft Foundation Class Library 撰寫,則會在呼叫對應COleClientItem物件的 SetExtent 成員函式時呼叫此函式。 如果 nDrawAspect 為DVASPECT_CONTENT,預設實作會將m_sizeExtent成員設定為指定的大小,否則會傳回 0。 覆寫此函式,以在變更專案的大小時執行特殊處理。

COleServerItem::OnShow

由架構呼叫,指示伺服器應用程式就地顯示 OLE 專案。

virtual void OnShow();

備註

當容器應用程式的使用者建立專案或執行動詞命令時,通常會呼叫此函式,例如需要顯示該專案的Edit。 默認實作會嘗試就地啟用。 如果失敗,函式會呼叫 OnOpen 成員函式,以在不同的視窗中顯示 OLE 專案。

如果您想要在顯示 OLE 項目時執行特殊處理,請覆寫此函式。

COleServerItem::OnUpdate

修改專案時由架構呼叫。

virtual void OnUpdate(
    COleServerItem* pSender,
    LPARAM lHint,
    CObject* pHint,
    DVASPECT nDrawAspect);

參數

pSender
修改檔之專案的指標。 可以是 NULL。

lHint
包含修改的相關信息。

pHint
儲存修改相關信息的對象指標。

nDrawAspect
DVASPECT 列舉中的值。 此參數可以有下列任何一個值:

  • DVASPECT_CONTENT Item 是以可顯示為容器內嵌物件的方式表示。

  • DVASPECT_THUMBNAIL專案會以「縮圖」表示呈現,以便顯示在瀏覽工具中。

  • DVASPECT_ICON Item 是由圖示表示。

  • DVASPECT_DOCPRINT Item 會以 [檔案] 選單中的 [列印] 命令列印時一樣呈現。

備註

不論提示或寄件者為何,默認實作都會呼叫 NotifyChanged

COleServerItem::OnUpdateItems

由架構呼叫以更新伺服器檔中的所有專案。

virtual void OnUpdateItems();

備註

默認實作會針對檔中的所有COleClientItem物件呼叫 UpdateLink

COleServerItem::SetItemName

當您建立連結項目以設定其名稱時,請呼叫此函式。

void SetItemName(LPCTSTR lpszItemName);

參數

lpszItemName
專案新名稱的指標。

備註

名稱在檔中必須是唯一的。 呼叫伺服器應用程式以編輯連結的專案時,應用程式會使用此名稱來尋找專案。 您不需要針對內嵌專案呼叫此函式。

另請參閱

MFC 範例 HIERSVR
CDocItem 類別
階層架構圖表
COleClientItem 類別
COleServerDoc 類別
COleTemplateServer 類別