Win32 API. Буфер обмена - Действия Буфера обмена

ОГЛАВЛЕНИЕ

Действия Буфера обмена

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

Чтобы поместить данные в буфер обмена или извлечь данные из него, окно должно сначала открыть буфер обмена, используя функцию OpenClipboard. Одновременно только одно окно может иметь открытым буфер обмена. Чтобы выяснить, какое окно имеет открытый буфер обмена, вызовите функцию GetOpenClipboardWindow. Когда окно закончит работу, оно должно закрыть буфер обмена, вызвав функцию CloseClipboard

Операции Вырезать (Cut) и Копировать (Copy)

Чтобы поместить информацию в буфер обмена, окно сначала очищает его от любого предыдущего содержания, используя функцию EmptyClipboard. Эта функция посылает сообщение WM_DESTROYCLIPBOARD предыдущему владельцу буфера обмена, освобождает ресурсы, связанные с данными в буфере обмена и передает в монопольное использование буфер обмена окну, которое имеет открытый буфер обмена. Чтобы выяснить, какое окно владеет буфером обмена, вызовите функцию GetClipboardOwner.

После очистки буфера обмена, окно помещает данные в него в стольких форматах, сколько это возможно, упорядоченных от наиболее квалифицирующего формата буфера обмена до наименее квалифицирующего. Для каждого формата, окно вызывает функцию SetClipboardData, устанавливая идентификатор формата и глобальный дескриптор памяти. Дескриптор памяти может быть НОЛЬ (NULL), указывая, что окно показывает данные по запросу. Для получения дополнительной информации, см. Отсроченная запись. 

Операция Вставить (Paste)

Чтобы извлечь вставляемую информацию из буфера обмена, окно сначала определяет формат буфера обмена, который извлекает информацию. Как правило, окно перечисляет доступные форматы буфера обмена, используя функцию EnumClipboardFormats, и применяет первый формат, который он распознает. Этим способом выбирается самый лучший доступный формат в соответствии с набором приоритетов, когда данные были помещены в буфер обмена.

Альтернативно, окно может использовать функцию GetPriorityClipboardFormat. Эта функция идентифицирует самый лучший доступный формат буфера обмена согласно заданному приоритету. Окно, которое распознает только один формат буфера обмена, может просто определить, является ли этот формат доступным, используя функцию IsClipboardFormatAvailable.

После определения формата буфера обмена, чтобы использовать его, окно вызывает функцию GetClipboardData. Эта функция возвращает значение дескриптора глобального объекта памяти, содержащего данные в заданном формате. Окно может на короткое время блокировать объект памяти с целью проверки или копирования данных. Однако окно не должно освобождать объект или оставаться блокированным в течение длительного периода времени.