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


Буфер обмена. Использование механизма буфера обмена OLE

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

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

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

Например, Microsoft Excel регистрирует пользовательский формат для электронных таблиц. Этот формат передает значительно больше сведений, чем, например растровое изображение; Если эти данные — в приложение, поддерживающее формат электронной таблицы, все формулы и значения из электронной таблицы сохраняются и обновляются при необходимости. Microsoft Excel также помещает данные в буфер обмена в форматы, поэтому он может вставить как элемент OLE. Любой 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();
}

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

См. также

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

буфер обмена