Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
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();
}