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 指向 IStorageIStream 接口,则接收器不得递增引用计数。

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 objidl.h

另请参阅

IAdviseSink