Буфер обмена

Информация - Компьютеры, программирование

Другие материалы по предмету Компьютеры, программирование

?тки запрашивает SB_THUMBPOSITION.

Формат буфера обмена CF_OWNERDISPLAY обеспечивает наивысшую степень разнообразия всех форматов поскольку за их отображение отвечает источник данных. Если приложение поддерживает необычный формат буфера обмена (например, приватный или зарегистрированный), существует только две возможности отображения данных вне приложения:

- отображение владельцем;

- написание окна просмотра буфера обмена.

 

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

 

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

Следует учитывать, что окно просмотра буфера обмена не владеет данными, которыми управляет. Требования к окну просмотра:

  1. Окно просмотра ни в коем случае не должно выполнять запись в содержимое буфера обмена.
  2. Окно просмотра никогда не должно оставлять какой-либо элемент содержимого буфера обмена заблокированным.
  3. Поскольку в любой момент времени могут выполняться несколько окон просмотра и сообщения передаются между ними посредством связанного списка окон просмотра, создаваемая программа должна отвечать следующим соглашениям:
  4. Сохранять значение возврата функции SetClipboardViewer(), которое указывает на следующее окно просмотра буфера обмена в цепочке. Windows помещает новые окно просмотра перед уже установленными.
  5. Передавать сообщения WM_DRAWCLIPBOARD следующему окну просмотра в цепочке. В противном случае остальные окна просмотра не будут обновляться.
  6. Передавать сообщения WM_CHANGECBCHAIN следующему окну просмотра в цепочке. В противном случае цепочка окон просмотра будет прервана.
  7. Отслеживать сообщения WM_CHANGECBCHAIN для удаления следующего окна цепочки. Параметр IParam содержит новый дескриптор следующего окна в случае удаления следующего, окна просмотра.
  8. Для удаления окна просмотра из цепочки следует вызвать функцию ChangeClipboardChain() с использованием сохраненного значения следующего окна.