Интерфейсы передачи данных
Интерфейс IDataObject предоставляет потребителям данных методы для получения и настройки данных объекта, определения форматов, поддерживаемых объектом, а также регистрации и получения уведомлений при изменении данных в объекте. При получении данных вызывающий объект может указать формат, в котором он хочет отобразить данные. Однако источник данных определяет носитель хранилища, который возвращается в параметре out, предоставленном вызывающим средством.
По сути, IDataObject предоставляет все средства, необходимые для реализации передачи буфера обмена Windows или составной передачи документов в приложениях. Если вы также хотите поддерживать передачу перетаскивания, необходимо реализовать интерфейсы IDropSource и интерфейсы IDropTarget вместе с IDataObject.
Интерфейс IDataObject в сочетании с API буфера обмена OLE предоставляет все возможности API буфера обмена Windows. Обычно не требуется использовать оба API буфера обмена. Поставщики данных, поддерживающие передачу перетаскивания или составные документы OLE, должны реализовать интерфейс IDataObject. Если приложение поддерживает передачу только буфера обмена, но планируется добавить перетаскивание или составные документы в более поздних выпусках, вам может потребоваться реализовать IDataObject и ИНТЕРФЕЙСы API буфера обмена OLE, чтобы свести к минимуму время, затраченное на перебор и отладку позже. Также может потребоваться реализовать IDataObject, чтобы использовать носитель передачи, отличный от глобальной памяти.
В следующей таблице приведены сведения об используемых типах передачи данных в зависимости от типов передачи данных, которые требуется поддерживать:
Поддержка | Использование |
---|---|
Составные документы |
IDataObject |
Перетаскивание передачи |
IDataObject, IDropSource, IDropTarget, DoDragDrop (или эквивалент) |
Передача буфера обмена с использованием глобальной памяти исключительно |
API буфера обмена |
Передача буфера обмена с помощью сред обмена, отличных от глобальной памяти. |
IDataObject |
Перенос буфера обмена теперь, но перетаскивание или составные документы позже |
IDataObject и интерфейсы и функции, перечисленные выше для перетаскивания передачи. |
Когда пользователь инициирует операцию передачи данных, исходное приложение создает экземпляр IDataObject и с его помощью делает данные доступными в одном или нескольких форматах. При передаче буфера обмена приложение вызывает функцию OleSetClipboard для передачи указателя объекта данных в OLE. (OleSetClipboard также предлагает стандартные форматы данных буфера обмена для приложений OLE версии 1 и не OLE.) В передаче перетаскивания приложение вызывает вместо этого функцию DoDragDrop.
На принимающей стороне передачи назначение получает указатель IDataObject либо в качестве аргумента вызова IDropTarget::D rop или путем вызова функции OleSetClipboard, в зависимости от того, является ли передача путем перетаскивания или перетаскивания или буфера обмена. Получив этот указатель, конечные вызовы IDataObject::EnumFormatEtc, чтобы узнать, какие форматы доступны для получения и о типах носителей, которые можно получить. Вооружившись этой информацией, принимающее приложение запрашивает данные с вызовом IDataObject::GetData.