Буфер обмена. Копирование и вставка данных
В этом разделе описывается минимальная работа, необходимая для реализации копирования в буфер обмена и вставки из буфера обмена в приложении OLE. Прежде чем продолжить, рекомендуется прочитать разделы "Объекты данных и источники данных" (OLE ).
Прежде чем реализовать копирование или вставку, необходимо сначала предоставить функции для обработки параметров копирования, вырезания и вставки в меню "Изменить".
Копирование или удаление данных
Копирование данных в буфер обмена
Определите, являются ли копируемые данные собственными или внедренными или связанными элементами.
Если данные внедрены или связаны, получите указатель на выбранный
COleClientItem
объект.Если данные являются собственными, а приложение является сервером, создайте новый объект, производный от
COleServerItem
содержащих выбранные данные. В противном случае создайтеCOleDataSource
объект для данных.
Вызовите функцию-член выбранного
CopyToClipboard
элемента.Если пользователь выбрал операцию вырезания вместо операции копирования, удалите выбранные данные из приложения.
Пример этой последовательности см OnEditCut
OnEditCopy
. в примерах программ OCLIENT и HIERSVR в MFC. Обратите внимание, что эти примеры поддерживают указатель на выбранные в данный момент данные, поэтому шаг 1 уже завершен.
Вставка данных
Вставка данных сложнее, чем копирование, так как необходимо выбрать формат для вставки данных в приложение.
Вставка данных из буфера обмена
В классе представления реализуйте для
OnEditPaste
обработки пользователей, выбрав параметр "Вставить" в меню "Изменить".OnEditPaste
В функции создайте объект и вызовитеCOleDataObject
ееAttachClipboard
функцию-член, чтобы связать этот объект с данными в буфере обмена.Вызовите
COleDataObject::IsDataAvailable
проверка, доступен ли определенный формат.Кроме того, вы можете искать
COleDataObject::BeginEnumFormats
другие форматы, пока не найдете наиболее подходящий для приложения.Выполните вставку формата.
Пример работы см. в реализации OnEditPaste
функций-членов в классах представления, определенных в примерах программ OCLIENT и HIERSVR MFC.
Совет
Основное преимущество разделения операции вставки на собственную функцию заключается в том, что тот же код вставки можно использовать при удалении данных в приложении во время операции перетаскивания. Как и в OCLIENT и HIERSVR, функция OnDrop
также может вызываться DoPasteItem
повторно, повторно применяя код, написанный для реализации операций вставки.
Чтобы обработать параметр "Вставить специальные" в меню "Изменить", см. диалоговое окно раздела в OLE.