Объекты и источники данных. Манипуляция

После создания объекта данных или источника данных можно выполнить ряд распространенных операций с данными, таких как вставка и удаление данных, перечисление форматов данных и многое другое. В этой статье описываются методы, необходимые для выполнения наиболее распространенных операций. Разделы включают:

Вставка данных в источник данных

Способ вставки данных в источник данных зависит от того, предоставляются ли данные немедленно или по запросу, а также от того, в каком носителе он предоставляется. Ниже приведены возможности.

Немедленное предоставление данных (немедленная отрисовка)

  • Повторяющийся вызов COleDataSource::CacheGlobalData для каждого формата буфера обмена, в котором предоставляются данные. Передайте используемый формат буфера обмена, дескриптор памяти, содержащей данные, и, при необходимости, структуру FORMATETC , описывающую данные.

    или

  • Если вы хотите работать непосредственно со структурами STGMEDIUM, то вместо этого необходимо вызвать COleDataSource::CacheGlobalDataCOleDataSource::CacheData его в приведенном выше варианте.

Предоставление данных по запросу (отложенная отрисовка)

Это расширенный раздел.

  • Повторяющийся вызов COleDataSource::DelayRenderData для каждого формата буфера обмена, в котором предоставляются данные. Передайте используемый формат буфера обмена и, при необходимости, структуру FORMATETC , описывающую данные. При запросе данных платформа вызовет COleDataSource::OnRenderDataее, которую необходимо переопределить.

    или

  • Если вы используете CFile объект для предоставления данных, вызовите COleDataSource::DelayRenderFileData вместо COleDataSource::DelayRenderData предыдущего параметра. При запросе данных платформа вызовет COleDataSource::OnRenderFileDataее, которую необходимо переопределить.

Определение форматов, доступных в объекте данных

Прежде чем приложение разрешает пользователю вставлять в него данные, необходимо знать, есть ли форматы в буфере обмена, которые он может обрабатывать. Для этого приложение должно выполнить следующее:

  1. COleDataObject Создайте объект и структуру FORMATETC.

  2. Вызовите функцию-член объекта AttachClipboard данных, чтобы связать объект данных с данными в буфере обмена.

  3. Выполните одно из следующих действий.

    • Вызовите функцию-член объекта IsDataAvailable данных, если требуется только один или два формата. Это позволит сэкономить время в тех случаях, когда данные в буфере обмена поддерживают значительно больше форматов, чем ваше приложение.

      или

    • Вызовите функцию-член объекта BeginEnumFormats данных, чтобы начать перечисление форматов, доступных в буфере обмена. Затем вызовите GetNextFormat , пока буфер обмена не возвращает формат, поддерживаемый приложением, или нет больше форматов.

Если вы используете ON_UPDATE_COMMAND_UI, теперь можно включить вставку и, возможно, вставить специальные элементы в меню "Изменить". Для этого вызовите либо CMenu::EnableMenuItemCCmdUI::Enable. Дополнительные сведения о том, какие приложения-контейнеры должны делать с элементами меню и когда, см. в разделе Меню и ресурсы: дополнения контейнеров.

Извлечение данных из объекта данных

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

Средняя Функция для вызова
Глобальная память (HGLOBAL) COleDataObject::GetGlobalData
Файл (CFile) COleDataObject::GetFileData
Структура STGMEDIUM (IStorage) COleDataObject::GetData

Как правило, среда будет указана вместе с форматом буфера обмена. Например, объект CF_EМБ EDDEDEDSTRUCT всегда находится в IStorage среде, требующей структуры STGMEDIUM. Поэтому вы будете использовать GetData , так как это единственная из этих функций, которые могут принимать структуру STGMEDIUM .

В случаях, когда формат буфера обмена находится в или IStreamHGLOBAL в среднем, платформа может предоставить CFile указатель, ссылающийся на данные. Затем приложение может использовать чтение файла для получения данных так же, как и импорт данных из файла. По сути, это клиентский интерфейс для OnRenderData и OnRenderFileData подпрограмм в источнике данных.

Теперь пользователь может вставить данные в документ так же, как и для других данных в том же формате.

Что вы хотите узнать больше о

См. также

Объекты и источники данных (OLE)
Класс COleDataObject
Класс COleDataSource