Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
Библиотека классов Microsoft Foundation (MFC) продолжает поддерживаться. Однако мы больше не добавляем функции или обновляем документацию.
После создания объекта данных или источника данных можно выполнить ряд распространенных операций с данными, таких как вставка и удаление данных, перечисление форматов данных и многое другое. В этой статье описываются методы, необходимые для выполнения наиболее распространенных операций. Ниже приведены разделы:
Вставка данных в источник данных
Способ вставки данных в источник данных зависит от того, предоставляются ли данные немедленно или по запросу, а также от того, в каком носителе он предоставляется. Ниже приведены возможности.
Немедленное предоставление данных (мгновенная отрисовка)
Вызывайте
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