IAdviseSink::OnDataChange 方法 (objidl.h)
由伺服器呼叫,以通知目前已註冊的數據對象,建議接收物件中的數據已變更。
語法
void OnDataChange(
[in] FORMATETC *pFormatetc,
[in] STGMEDIUM *pStgmed
);
參數
[in] pFormatetc
FORMATETC 結構的指標,描述呼叫數據物件的格式、目標裝置、轉譯和儲存資訊。
[in] pStgmed
STGMEDIUM 結構的指標,其定義儲存媒體 (全域記憶體、磁碟檔、儲存物件、數據流物件、GDI 物件,或該媒體的) 和擁有權,以供呼叫數據物件使用。
傳回值
無
備註
鏈接物件的物件處理程式和容器會實作 IAdviseSink::OnDataChange ,以在通知物件中的數據已變更時採取適當的步驟。 他們也必須呼叫 IDataObject::D Advise ,以設定與其感興趣的數據中對象的諮詢連線。
利用 OLE 快取支援的容器不需要註冊數據變更通知,因為更新容器呈現物件所需的資訊,包括其數據中的任何變更,都保留在物件的快取中。
實作者的注意事項
如果您為容器實作 IAdviseSink::OnDataChange ,請記住此方法是異步的,而且在異步方法中進行同步呼叫無效。 因此,您無法呼叫 IDataObject::GetData 來取得更新物件所需的數據。 相反地,您可以張貼內部訊息,或呼叫 InvalidateRect 並等候 WM_PAINT 訊息,讓變更數據的矩形失效,此時您可以取得數據並更新物件。數據本身只有在呼叫期間才有效,會使用 pStgmed 所指向的儲存媒體傳遞。 由於呼叫端擁有媒體,因此建議接收不應釋出。 此外,如果 pStgmed 指向 IStorage 或 IStream 介面,接收不得遞增參考計數。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 專業版 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | objidl.h |