Поделиться через


Метод IAdviseSink::OnDataChange (objidl.h)

Вызывается сервером для уведомления зарегистрированного объекта данных, уведомляющего приемники об изменении данных в объекте.

Синтаксис

void OnDataChange(
  [in] FORMATETC *pFormatetc,
  [in] STGMEDIUM *pStgmed
);

Параметры

[in] pFormatetc

Указатель на структуру FORMATETC , которая описывает формат, целевое устройство, отрисовку и сведения о хранилище вызывающего объекта данных.

[in] pStgmed

Указатель на структуру STGMEDIUM , которая определяет среду хранения (глобальную память, файл диска, объект хранилища, объект потока, объект GDI или неопределенный) и владение этим носителем для вызывающего объекта данных.

Возвращаемое значение

None

Remarks

Обработчики объектов и контейнеры объектов ссылок реализуют интерфейс IAdviseSink::OnDataChange для выполнения соответствующих действий при получении уведомления об изменении данных в объекте. Они также должны вызвать IDataObject::D Advise , чтобы настроить консультативные подключения к объектам, данные которых им нужны.

Контейнеры, использующие поддержку кэширования OLE, не нужно регистрировать для уведомлений об изменении данных, так как сведения, необходимые для обновления представления контейнера объекта, включая любые изменения в его данных, хранятся в кэше объекта.

Примечания для разработчиков

При реализации IAdviseSink::OnDataChange для контейнера помните, что этот метод является асинхронным и что выполнение синхронных вызовов в асинхронных методах недопустимо. Поэтому нельзя вызвать IDataObject::GetData для получения данных, необходимых для обновления объекта. Вместо этого вы публикуете внутреннее сообщение или делаете недействительным прямоугольник для измененных данных, вызвав InvalidateRect и дождавшись WM_PAINT сообщения, после чего вы можете получить данные и обновить объект.

Сами данные, действительные только в течение всего вызова, передаются с помощью среды хранения, на которую указывает pStgmed. Так как вызывающий объект владеет средой, советная раковина не должна освобождать ее. Кроме того, если pStgmed указывает на интерфейс IStorage или IStream , приемник не должен увеличивать число ссылок.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header objidl.h

См. также раздел

IAdviseSink