Объекты и источники данных. Манипуляция
После создания объекта данных или источника данных можно выполнить ряд распространенных операций с данными, таких как вставка и удаление данных, перечисление форматов данных и многое другое. В этой статье описываются методы, необходимые для выполнения наиболее распространенных операций. Разделы включают:
Вставка данных в источник данных
Способ вставки данных в источник данных зависит от того, предоставляются ли данные немедленно или по запросу, а также от того, в каком носителе он предоставляется. Ниже приведены возможности.
Немедленное предоставление данных (немедленная отрисовка)
Повторяющийся вызов
COleDataSource::CacheGlobalData
для каждого формата буфера обмена, в котором предоставляются данные. Передайте используемый формат буфера обмена, дескриптор памяти, содержащей данные, и, при необходимости, структуру FORMATETC , описывающую данные.или
Если вы хотите работать непосредственно со структурами STGMEDIUM, то вместо этого необходимо вызвать
COleDataSource::CacheGlobalData
COleDataSource::CacheData
его в приведенном выше варианте.
Предоставление данных по запросу (отложенная отрисовка)
Это расширенный раздел.
Повторяющийся вызов
COleDataSource::DelayRenderData
для каждого формата буфера обмена, в котором предоставляются данные. Передайте используемый формат буфера обмена и, при необходимости, структуру FORMATETC , описывающую данные. При запросе данных платформа вызоветCOleDataSource::OnRenderData
ее, которую необходимо переопределить.или
Если вы используете
CFile
объект для предоставления данных, вызовитеCOleDataSource::DelayRenderFileData
вместоCOleDataSource::DelayRenderData
предыдущего параметра. При запросе данных платформа вызоветCOleDataSource::OnRenderFileData
ее, которую необходимо переопределить.
Определение форматов, доступных в объекте данных
Прежде чем приложение разрешает пользователю вставлять в него данные, необходимо знать, есть ли форматы в буфере обмена, которые он может обрабатывать. Для этого приложение должно выполнить следующее:
COleDataObject
Создайте объект и структуру FORMATETC.Вызовите функцию-член объекта
AttachClipboard
данных, чтобы связать объект данных с данными в буфере обмена.Выполните одно из следующих действий.
Вызовите функцию-член объекта
IsDataAvailable
данных, если требуется только один или два формата. Это позволит сэкономить время в тех случаях, когда данные в буфере обмена поддерживают значительно больше форматов, чем ваше приложение.или
Вызовите функцию-член объекта
BeginEnumFormats
данных, чтобы начать перечисление форматов, доступных в буфере обмена. Затем вызовитеGetNextFormat
, пока буфер обмена не возвращает формат, поддерживаемый приложением, или нет больше форматов.
Если вы используете ON_UPDATE_COMMAND_UI, теперь можно включить вставку и, возможно, вставить специальные элементы в меню "Изменить". Для этого вызовите либо CMenu::EnableMenuItem
CCmdUI::Enable
. Дополнительные сведения о том, какие приложения-контейнеры должны делать с элементами меню и когда, см. в разделе Меню и ресурсы: дополнения контейнеров.
Извлечение данных из объекта данных
После выбора формата данных все, что остается, — получить данные из объекта данных. Для этого пользователь решает, куда поместить данные, а приложение вызывает соответствующую функцию. Данные будут доступны в одном из следующих носителей:
Средняя | Функция для вызова |
---|---|
Глобальная память (HGLOBAL ) |
COleDataObject::GetGlobalData |
Файл (CFile ) |
COleDataObject::GetFileData |
Структура STGMEDIUM (IStorage ) |
COleDataObject::GetData |
Как правило, среда будет указана вместе с форматом буфера обмена. Например, объект CF_EМБ EDDEDEDSTRUCT всегда находится в IStorage
среде, требующей структуры STGMEDIUM. Поэтому вы будете использовать GetData
, так как это единственная из этих функций, которые могут принимать структуру STGMEDIUM .
В случаях, когда формат буфера обмена находится в или IStream
HGLOBAL
в среднем, платформа может предоставить CFile
указатель, ссылающийся на данные. Затем приложение может использовать чтение файла для получения данных так же, как и импорт данных из файла. По сути, это клиентский интерфейс для OnRenderData
и OnRenderFileData
подпрограмм в источнике данных.
Теперь пользователь может вставить данные в документ так же, как и для других данных в том же формате.
Что вы хотите узнать больше о
См. также
Объекты и источники данных (OLE)
Класс COleDataObject
Класс COleDataSource