Смекни!
smekni.com

Буфер обмена (стр. 2 из 2)

Таблица 2

Сообщения, принимаемые владельцем буфера обмена для отображения данных

Сообщение Значение
WM_ASKCBFORMATNAME Отправляется, когда окно просмотра буфера обмена запрашивает имя формата. Владелец буфера обмена должен скопировать байты wParamв буфер, на который указывает параметр lPrarm.
WM_PAINTCLIPBOARD Отправляется, когда клиентская область окна буфера обмена требует обновления. Параметр wParamявляется дескриптором окна просмотра буфера обмена. Параметр lParamявляется указателем на PAINTSTRUCT.
WM_SIZECLIPBOARD Отправляется при изменении размера клиентской области окна просмотра буфера обмена. Параметр wParamявляется дескриптором окна просмотра буфера обмена. Параметр lParam- указатель на структуру RECT.
WM_HSCROLLCLIPBOARD иWM_VSCROLLCLIPBOARD Отправляется при прокрутке клиентской области окна просмотра буфера обмена. Параметр wParamявляется дескриптором окна просмотра буфера обмена. Младшее слово параметра lParamобозначает тип запроса полосы прокрутки (подобно параметру wParam в сообщении WM_HSCROLL или WM_VSCROLL). Старшее слово параметра lParamуказывает позицию бегунка тогда и только тогда, когда полоса прокрутки запрашивает SB_THUMBPOSITION.

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

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

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

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

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

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

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

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

3. Поскольку в любой момент времени могут выполняться несколько окон просмотра и сообщения передаются между ними посредством связанного списка окон просмотра, создаваемая программа должна отвечать следующим соглашениям:

- Сохранять значение возврата функции SetClipboardViewer(), которое указывает на следующее окно просмотра буфера обмена в цепочке. Windows помещает новые окно просмотра перед уже установленными.

- Передавать сообщения WM_DRAWCLIPBOARD следующему окну просмотра в цепочке. В противном случае остальные окна просмотра не будут обновляться.

- Передавать сообщения WM_CHANGECBCHAINследующему окну просмотра в цепочке. В противном случае цепочка окон просмотра будет прервана.

- Отслеживать сообщения WM_CHANGECBCHAINдля удаления следующего окна цепочки. Параметр IParamсодержит новый дескриптор следующего окна в случае удаления следующего, окна просмотра.

- Для удаления окна просмотра из цепочки следует вызвать функцию ChangeClipboardChain() с использованием сохраненного значения следующего окна.