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


Сведения о буфере обмена

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

Буфер обмена управляется пользователем. Окно должно передавать данные в буфер обмена или из буфера обмена только в ответ на команду от пользователя. Окно не должно использовать буфер обмена для передачи данных без знаний пользователя.

Объект памяти в буфере обмена может находиться в любом формате данных, который называется форматом буфера обмена. Каждый формат определяется целым числом без знака. Для стандартных (предопределенных) форматов буфера обмена это значение является константой, определенной в Winuser.h; для зарегистрированных форматов буфера обмена — это возвращаемое значение функции RegisterClipboardFormat .

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

В этом разделе рассматривается следующее:

Команды буфера обмена

Обычно пользователь выполняет операции буфера обмена, выбрав команды из меню "Изменить". Ниже приведено краткое описание стандартных команд буфера обмена.

Команда Description
Вырезать Помещает копию текущего выделенного фрагмента в буфер обмена и удаляет выделение из документа. Предыдущее содержимое буфера обмена уничтожается.
Копировать Помещает копию текущего выделенного фрагмента в буфер обмена. Документ остается неизменным. Предыдущее содержимое буфера обмена уничтожается.
Вставить Заменяет текущий выбор содержимым буфера обмена. Содержимое буфера обмена не изменяется.
Удаление Удаляет текущий выбор из документа. Содержимое буфера обмена не изменяется. Эта команда не включает буфер обмена, но она должна отображаться с командами буфера обмена в меню "Изменить ".

 

Порядковый номер буфера обмена

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

Средства просмотра буфера обмена

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

Как правило, окно просмотра буфера обмена может отображать по крайней мере три наиболее распространенных формата: CF_TEXT, CF_BITMAP и CF_METAFILEPICT. Если окно не делает данные доступными в любом из этих трех форматов, он должен предоставлять данные в формате отображения или использовать формат отображения владельца.

Цепочка просмотра буфера обмена — это связывание двух или нескольких сущностей, чтобы они зависели друг от друга для операции. Эта взаимозависимость (цепочка) позволяет всем запущенным приложениям средства просмотра буфера обмена получать сообщения, отправленные в текущий буфер обмена.

В этом разделе рассматриваются следующие разделы.

Окно просмотра буфера обмена

Окно добавляет себя в цепочку просмотра буфера обмена, вызвав функцию SetClipboardViewer. Возвращаемое значение — это дескриптор следующего окна в цепочке. Чтобы получить дескриптор в первом окне в цепочке, вызовите функцию GetClipboardViewer .

Каждое окно просмотра буфера обмена должно отслеживать следующее окно в цепочке просмотра буфера обмена. При изменении содержимого буфера обмена система отправляет сообщение WM_DRAWCпакет интерфейса пользователя BOARD в первое окно в цепочке. После обновления его отображения каждый окно просмотра буфера обмена должно передать это сообщение в следующее окно в цепочке.

Перед закрытием окно просмотра буфера обмена должно удалить себя из цепочки просмотра буфера обмена, вызвав функцию ChangeClipboardChain. Затем система отправляет сообщение WM_CHANGECBCHAIN в первое окно в цепочке.

Дополнительные сведения об обработке сообщений WM_DRAWCпакет интерфейса пользователя BOARD и WM_CHANGECBCHAIN см. в разделе "Создание окна просмотра буфера обмена".

Форматы отображения

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

Четыре формата отображения: CF_DSPBITMAP, CF_DSPMETAFILEPICT, CF_DSPTEXT и CF_DSPENHMETAFILE. Эти форматы отображения отображаются так же, как и стандартные форматы, которые: CF_BITMAP, CF_TEXT, CF_METAFILEPICT и CF_ENHMETAFILE.

Формат отображения владельца

Для владельца буфера обмена, который не использует ни один из стандартных форматов буфера обмена, альтернативным вариантом предоставления формата отображения является использование формата буфера обмена (CF_OWNERDISPLAY) владельца.

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

Стандартные форматы буфера обмена