次の方法で共有


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 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー objidl.h

こちらもご覧ください

IAdviseSink