Поделиться через


Буфер обмена. С помощью OLE механизм буфера обмена

OLE использует стандартные форматы и некоторые форматы OLE-специфического для передачи данных через буфер обмена.

Если вырезать или скопировать данные из приложения, данные хранятся в буфере обмена для последующего использования в операциях " вставить ".Эти данные в различных форматах.Когда пользователь выбирает, чтобы вставить данные из буфера обмена, приложение может выбрать, этих форматов для использования.Приложение должно быть записано, чтобы выбрать формат, который обеспечивает наибольшую сведения, если пользователь не будет просить определенный формат, используя специальный " вставить ".Прежде чем продолжить, может понадобиться прочитать разделы Объекты данных и источников данных (OLE).Они описывают принципы как передачи данных, и способов их реализации в приложениях.

Окна определяют несколько стандартных форматов, которые можно использовать для передачи данных через буфер обмена.Они включают метафайлы, текст, растровые изображения и другие.OLE OLE-специфического, указывающий несколько форматов.Для приложений, которым требуется больше сведений, чем заданное эти стандартные форматы, рекомендуется зарегистрировать свои собственные пользовательские форматы буфера обмена.Используйте функцию API Win32 RegisterClipboardFormat для этого.

Например, Microsoft Excel регистрируется пользовательский формат электронных таблиц.Этот формат имеет гораздо больше сведений, чем, например растровое изображение.Когда эти данные вставлены в приложении, которое поддерживает формат электронных таблиц, все формулы и значения из электронной таблицы сохраняются и могут быть обновлены, если это необходимо.Microsoft Excel также помещает данные в буфер обмена в форматы, чтобы он может вставить как элемент OLE.Любой ЯВЛЯЕТСЯ контейнер документа может вставлять эту информацию как внедренный элемент.Этот встроенный элемент можно изменить с помощью Microsoft Excel.Буфер обмена также содержит простое растровое изображение образа выбранного диапазона в электронной таблице.Это также можно вставить в документе или OLE контейнеры в редакторы растрового изображения, например, краска.В случае растрового изображения, однако, не существует способа обработки данных, например электронных таблицах.

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

Например, чтобы включить команду " вырезать ", можно написать обработчик какого-либо объекта, например следующим образом:

void CMyListView::OnEditCut()
{
   // Create an OLE data source on the heap
   COleDataSource* pData = new COleDataSource;
   // Get the currently selected data
   HGLOBAL hGlob = GlobalAlloc(GMEM_FIXED, 64);
   strcpy_s((char*)hGlob, 64, "Current selection\r\n");
   // For the appropriate data formats...
   pData->CacheGlobalData( CF_TEXT, hGlob );
   // The Clipboard now owns the allocated memory
   // and will delete this data object
   // when new data is put on the Clipboard
   pData->SetClipboard();
}

Дополнительные сведения

См. также

Основные понятия

буфер обмена