Составители:
Но поскольку в этом случае владелец буфера обмена несет непосредственную ответст-
венность за отображение данных, при их запросе Windows не посылает сообщение
WM_RENDERFORMAT. Просто сообщение из программы просмотра должно быть пе-
редано непосредственно программе-владельцу буфера обмена.
Как было сказано ранее, идентифицировать владельца буфера можно с помощью
функции GetClipboardOwner(). И наоборот, программа-владелец может определить про-
грамму просмотра с помощью функции GetClipboardViewer().
При использовании данного формата программа просмотра посылает приложению-
владельцу запрос на формирование реального изображения и предоставляет ему доступ
к своему окну. Программа просмотра может послать пять различных сообщений:
WM_ASKCBFORMATNAME - Это сообщение посылается для запроса копии имени
формата у владельца буфера обмена. При этом не следует забывать о том, что сам
буфер обмена содержит лишь идентификатор CF_OWNERDISPLAY, поэтому про-
грамма просмотра имеет возможность самостоятельно принимать решение о том,
нужно ли ей знать реальный тип данных. Сообщение WM_ASKCBFORMATNAME
сопровождается указанием в аргументе wParam количества копируемых байтов. Ар-
гумент lParam содержит указатель на буфер, в который должен быть отправлен ре-
зультат.
WM_HSCROLLCLIPBOARD / WM_VSCROLLCLIPBOARD - Эти сообщения посылают-
ся в том случае, когда программа просмотра содержит вертикальную или горизон-
тальную полосу прокрутки и связанные с ними события должны передаваться вла-
дельцу буфера обмена. В аргументе wParam хранится дескриптор окна программы
просмотра, а в аргументе lParam - стандартные идентификаторы, которые сопровож-
дают сообщения WM_HSCROLL и WM_VSCROLL.
WM_PAINTCLIPBOARD - Это сообщение посылается в качестве запроса на обновление
окна программы просмотра, возможно, в ответ на сообщение WM_PAINT. Аргумент
wParam содержит дескриптор окна программы просмотра. Аргумент lParam пред-
ставляет собой глобальный дескриптор объекта, содержащего структуру
PAINTSTRUCT, которая задает обновляемую область экрана. Чтобы определить, вся
ли рабочая область окна требует обновления, владелец буфера обмена должен срав-
нить размеры области рисования, которые содержатся в поле repaint структуры
PAINTSTRUCT,
с размерами, указанными в последнем сообщении
WM_SIZECLIPBOARD.
WM_SIZECLIPBOARD - Это сообщение посылается для указания того, что окно про-
граммы просмотра изменило свои размеры. Аргумент wParam содержит дескриптор
окна просмотра. Аргумент lParam представляет собой глобальный дескриптор объек-
та, содержащего структуру RECT, которая задает обновляемую область.
В ответ на любое из этих сообщений владелец буфера обмена должен вызвать
функцию InvalidateRect() или обновить окно просмотра и соответствующим образом ус-
тановить позицию бегунков полос прокрутки.
Приложения могут также объявлять собственные частные форматы буфера об-
мена, зарегистрировав новый формат с помощью функции RegisterClipboardFormat():
wFormat = RegisterClipboardFormat( lpszFormatTitle );
Новый идентификатор wFormat получает значение из диапазона от 0xC000 до
0xFFFF и может использоваться как параметр функций SetClipboardData() и GetClip-
boardData(). Чтобы другие приложение или другой экземпляр того же приложения смог-
ли прочитать данные из буфера обмена в этом формате, им необходимо предоставить
аналогичный идентификатор wFormat. Его значение может передаваться через буфер
обмена в формате CF_TEXT.
173
Но поскольку в этом случае владелец буфера обмена несет непосредственную ответст- венность за отображение данных, при их запросе Windows не посылает сообщение WM_RENDERFORMAT. Просто сообщение из программы просмотра должно быть пе- редано непосредственно программе-владельцу буфера обмена. Как было сказано ранее, идентифицировать владельца буфера можно с помощью функции GetClipboardOwner(). И наоборот, программа-владелец может определить про- грамму просмотра с помощью функции GetClipboardViewer(). При использовании данного формата программа просмотра посылает приложению- владельцу запрос на формирование реального изображения и предоставляет ему доступ к своему окну. Программа просмотра может послать пять различных сообщений: WM_ASKCBFORMATNAME - Это сообщение посылается для запроса копии имени формата у владельца буфера обмена. При этом не следует забывать о том, что сам буфер обмена содержит лишь идентификатор CF_OWNERDISPLAY, поэтому про- грамма просмотра имеет возможность самостоятельно принимать решение о том, нужно ли ей знать реальный тип данных. Сообщение WM_ASKCBFORMATNAME сопровождается указанием в аргументе wParam количества копируемых байтов. Ар- гумент lParam содержит указатель на буфер, в который должен быть отправлен ре- зультат. WM_HSCROLLCLIPBOARD / WM_VSCROLLCLIPBOARD - Эти сообщения посылают- ся в том случае, когда программа просмотра содержит вертикальную или горизон- тальную полосу прокрутки и связанные с ними события должны передаваться вла- дельцу буфера обмена. В аргументе wParam хранится дескриптор окна программы просмотра, а в аргументе lParam - стандартные идентификаторы, которые сопровож- дают сообщения WM_HSCROLL и WM_VSCROLL. WM_PAINTCLIPBOARD - Это сообщение посылается в качестве запроса на обновление окна программы просмотра, возможно, в ответ на сообщение WM_PAINT. Аргумент wParam содержит дескриптор окна программы просмотра. Аргумент lParam пред- ставляет собой глобальный дескриптор объекта, содержащего структуру PAINTSTRUCT, которая задает обновляемую область экрана. Чтобы определить, вся ли рабочая область окна требует обновления, владелец буфера обмена должен срав- нить размеры области рисования, которые содержатся в поле repaint структуры PAINTSTRUCT, с размерами, указанными в последнем сообщении WM_SIZECLIPBOARD. WM_SIZECLIPBOARD - Это сообщение посылается для указания того, что окно про- граммы просмотра изменило свои размеры. Аргумент wParam содержит дескриптор окна просмотра. Аргумент lParam представляет собой глобальный дескриптор объек- та, содержащего структуру RECT, которая задает обновляемую область. В ответ на любое из этих сообщений владелец буфера обмена должен вызвать функцию InvalidateRect() или обновить окно просмотра и соответствующим образом ус- тановить позицию бегунков полос прокрутки. Приложения могут также объявлять собственные частные форматы буфера об- мена, зарегистрировав новый формат с помощью функции RegisterClipboardFormat(): wFormat = RegisterClipboardFormat( lpszFormatTitle ); Новый идентификатор wFormat получает значение из диапазона от 0xC000 до 0xFFFF и может использоваться как параметр функций SetClipboardData() и GetClip- boardData(). Чтобы другие приложение или другой экземпляр того же приложения смог- ли прочитать данные из буфера обмена в этом формате, им необходимо предоставить аналогичный идентификатор wFormat. Его значение может передаваться через буфер обмена в формате CF_TEXT. 173
Страницы
- « первая
- ‹ предыдущая
- …
- 169
- 170
- 171
- 172
- 173
- …
- следующая ›
- последняя »