Буфер обмена. Использование механизма буфера обмена OLE
OLE использует стандартные форматы и некоторые форматы OLE для передачи данных через буфер обмена.
При сокращении или копировании данных из приложения данные хранятся в буфере обмена, которые будут использоваться позже в операциях вставки. Эти данные доступны в различных форматах. Когда пользователь выбирает вставку данных из буфера обмена, приложение может выбрать, какие из этих форматов следует использовать. Приложение должно быть записано, чтобы выбрать формат, предоставляющий большую информацию, если пользователь не запрашивает определенный формат, используя специальный формат вставки. Прежде чем продолжить, вы можете прочитать разделы о объектах данных и источниках данных (OLE ). Они описывают основы работы передачи данных и их реализации в приложениях.
Windows определяет ряд стандартных форматов, которые можно использовать для передачи данных через буфер обмена. К ним относятся метафайлы, текст, растровые изображения и другие. OLE определяет ряд форматов OLE, а также. Для приложений, которым требуется больше сведений, чем в этих стандартных форматах, рекомендуется зарегистрировать собственные настраиваемые форматы буфера обмена. Для этого используйте функцию API Win32 RegisterClipboardFormat .
Например, Microsoft Excel регистрирует настраиваемый формат для электронных таблиц. Этот формат содержит гораздо больше информации, чем, например, растровое изображение. Если эти данные вставляются в приложение, поддерживающее формат электронной таблицы, все формулы и значения из электронной таблицы сохраняются и при необходимости могут быть обновлены. Microsoft Excel также помещает данные в буфер обмена в форматы, чтобы его можно было вставить как элемент OLE. Любой контейнер документов OLE может вставить эти сведения в виде внедренного элемента. Этот внедренный элемент можно изменить с помощью Microsoft Excel. Буфер обмена также содержит простое растровое изображение изображения выбранного диапазона на электронной таблице. Это также может быть вставлено в контейнеры документов OLE или в редакторы растровых изображений, например Paint. Однако в случае растрового изображения нет способа управления данными в виде электронной таблицы.
Чтобы получить максимальный объем информации из буфера обмена, приложения должны проверка для этих настраиваемых форматов, прежде чем вставка данных из буфера обмена.
Например, чтобы включить команду "Вырезать", можно написать обработчик примерно так:
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();
}