Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
После создания объекта данных или источника данных можно выполнить ряд распространенных операций с данными, таких как вставка и удаление данных, перечисление форматов данных и многое другое. В этой статье описываются методы, необходимые для выполнения наиболее распространенных операций. Ниже приведены разделы:
Вставка данных в источник данных
Способ вставки данных в источник данных зависит от того, предоставляются ли данные немедленно или по запросу, а также от того, в каком носителе он предоставляется. Ниже приведены возможности.
Немедленное предоставление данных (мгновенная отрисовка)
Вызывайте
COleDataSource::CacheGlobalDataмногократно для каждого формата буфера обмена, в котором вы предоставляете данные. Передайте используемый формат буфера обмена, дескриптор памяти, содержащей данные, и, при необходимости, структуру FORMATETC , описывающую данные.-или-
Если вы хотите работать непосредственно со структурами STGMEDIUM, необходимо вызвать
COleDataSource::CacheData, а неCOleDataSource::CacheGlobalDataв приведенном выше варианте.
Предоставление данных по запросу (отложенное отображение)
Это расширенный раздел.
Вызывайте
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_EMBEDDEDSTRUCT всегда находится в IStorage среде, требующей структуры STGMEDIUM . Поэтому вы будете использовать GetData , так как это единственная из этих функций, которые могут принимать структуру STGMEDIUM .
В случаях, когда формат буфера обмена находится в среде IStream или HGLOBAL, фреймворк может предоставить указатель CFile, ссылающийся на данные. Затем приложение может использовать чтение файла для получения данных так же, как и импорт данных из файла. По сути, это клиентский интерфейс для OnRenderData и OnRenderFileData подпрограмм в источнике данных.
Теперь пользователь может вставить данные в документ так же, как и для других данных в том же формате.
Что вы хотите узнать больше о
См. также
Объекты данных и источники данных (OLE)
Класс COleDataObject
Класс COleDataSource