Буфер обмена. Форматы буфера обмена, страница 8

\

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

Синтаксис

int GetPriorityClipboardFormat ( UINT* IpPriorityList, int nCount )

Параметры

IpPriorityList

UINT*: Указатель на массив значений UINT. Каждый элемент массива должен содержать номер требуемого формата буфера обмена. Это один из предопределенных форматов, такой как CF_TEXT, либо специальный формат, возвращаемый функциями RegisterClipboardFormat или EnumClipboardFormats. Элементы списка должны следовать в порядке убывания приоритетности.

nCount

int: Количество элементов массива, на который указывает IpPriorityList.

Возвращаемое значение

int: Формат с наивысшим из доступных приоритетом. Если буфер обмена пуст, функция возвращает значение NULL. Если буфер обмена содержит данные, но они не относятся ни к одному из требуемых форматов, функция возвращает значение -1. Для получения кода ошибки используется функция GetLastError.

Включаемый файл

winuser.h

См. также

RegisterClipboardFormat IsClipboardFormatAvailable, EnumClipboardFormats.

Пример

Следующий пример демонстрирует несколько расширенных применений буфера обмена. После запуска программы примера (обрабатывается сообщение WM_CREATE) формат буфера обмена регистрируется. Кроме того, буфер обмена настраивается для воспроизведения с задержкой двух форматов — CF_TEXT и зарегистрированного формата. При воспроизведении с задержкой данные не загружаются в буфер обмена, пока не будут зарегистрированы приложением. После регистрации Windows отправляет сообщение WM_RENDERFORMAT владельцу буфера обмена, который в ответ загружает данные в буфер обмена. Как только сообщение WM_PAINT будет принято, программа выполнит чтение буфера обмена. Она попытается прочитать оба формата буфера обмена. Формат CF_TEXT читается через стандартного протокола буфера обмена. Содержимое этого формата можно отобразить в любой момент. Перед чтением зарегистрированного формата буфера обмена приложение использует функцию GetPriorityClipboardFormat для выявления доступных форматов. В данном случае проверяется список лишь из двух приемлемых форматов. Если зарегистрированный формат доступен, содержимое буфера обмена отображается в клиентской области приложения (см. рис. 18.3).

IsClipboardFormatAvailable              Windows 98   • Windows 2000

Описание

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

Синтаксис

BOOL IsClipboardFormatAvailable ( UINT wFormat )

Параметры

wFormat

UINT: Требуемый формат буфера обмена. Это один из предопределенных форматов либо формат, зарегистрированный приложением с помощью функции  RegisterClipboardFormat.

Возвращаемое значение

BOOL: TRUE, если данные указанного формата доступны в буфере обмена, FALSE в противном случае. Для получения кода ошибки используется функция GetLastError.

Включаемый файл

winuser.h

См. также

GetPriorityClipboardFormat, EnumCIipboardFormats

Пример

См. пример, приведенный в описании функции GetPrioriryClipboardFormat.

OpenClipboard                           Windows 98   • Windows 2000

Описание

Функция OpenClipboard открывает буфер обмена для чтения и записи его содержимого. Буфер обмена должен быть открыт до того, как функция GetClipboardData сможет считывать  его  содержимое либо  функция SetClipboardData сможет устанавливать его содержимое. Буфер обмена остается открытым до вызова функции CloseClipboard. Ни одно приложение не должно возвращать управление Windows, оставляя при этом буфер обмена открытым. Поэтому буфер обмена необходимо открывать и закрывать в течение обработки единственного сообщения Windows.

Синтаксис

BOOL OpenClipboard ( HWND h Wnd )

Параметры

hWnd

HWND: Дескриптор окна, которое открывает буфер обмена.

Возвращаемое значение

BOOL: TRUE, если буфер обмена открыт, и FALSE в  случае ошибки (например, если другое приложение оставило буфер обмена открытым). Для получения кода ошибки применяется функция GetLastError.

Включаемый файл

winuser.h

См. также

CloseClipboard, GetClipboardData, SetClipboardData, GetOpenCIipboardWindow

Пример

См. пример, приведенный в описании функции ChangeClipboardChain.

RegisterClipboardFormat                 Windows 98   • Windows 2000

Описание

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

Синтаксис

UINT RegisterClipboardFormat ( LPCTSTR IpFormatName )

Параметры

IpFormatName

LPCTSTR Указатель на завершаемую нулем строку символов, содержащую имя нового формата.

Возвращаемое значение

UINT: Номер формата, используемый системой Windows для его индексации. В случае ошибки возвращается значение NULL. Если формат уже зарегистрирован в Windows, возвращаемое значение соответствует первоначальной регистрации.

Включаемый файл

winuser.h

См. также

EnumCIipboardFormats, GetCIipboardFormatName

Пример

См. пример, приведенный в описании функции GetPriorityCHpboardFormat.

SetClipboardData                         * Windows 98   4 Windows 2000

Описание

Функция SetClipboardData помещает данные в буфер обмена для конкретного формата. Это единственный способ установки содержимого буфера обмена. Прежде чем приложение поместит какие-либо данные в буфер обмена, он должен быть открыт при помощи функции OpenClipboard, а все форматы удалены путем вызова функции EmptyClipboard. Непосредственно после записи данных следует обратиться к функции CloseClipboard.

Синтаксис

HANDLE SetClipboardData ( UINT wFormat, HANDLE hMem )

Параметры

wFormat

WORD: Задает тип данных, содержащихся в блоке памяти, на который указывает дескриптор hMem. Тип данных может быть любым из перечисленных в табл. 18.1 либо зарегистрированным форматом буфера обмена.

hMem

HANDLE: Дескриптор глобального блока памяти, содержащего данные в указанном формате. Для реализации воспроизведения с задержкой параметру hMem необходимо присвоить значение NULL. Это означает, что данные не должны передаваться в буфер обмена до приема сообщения WM_RENDERFORMAT.

Возвращаемое значение

HANDLE: Дескриптор данных в буфере обмена, который эти данные заменяет. Обычно это значение не используется.

Включаемый файл

winuser.h

См. также

OpenClipboard, GetClipboardData, EmptyClipboard, CloseClipboard

Связанные сообщения

WM_RENDERFORMAT, WM_RENDERALLFORMATS

ПРЕДУПРЕЖДЕНИЕПосле установки данных буфера обмена блок памяти принадлежит   Windows. Приложения не должны удалять данные или оставлять блок заблокированным.  Приложения,  использующие буфер обмена не должны допускать передачу управления   Windows, пока буфер обмена открыт. Другими словами, буфер обмена должен открываться и закрываться в течение обработки единственного сообщения  Windows.

Пример

См. пример, приведенный в описании функции GetPriorityClipboardFormat.

SetClipboardViewer                      Windows 98   • Windows 2000 J

Описание

Функция SetClipboardViewer помещает конкретное окно в начало цепочки окон просмотра буфера обмена. Возвращаемое значение (дескриптор следующего окна просмотра в цепочке) должно сохраняться вызывающей процедурой и постоянно обновляться за счет обработки сообщения WM_CHANGECBCHAIN. Дескриптор следующего окна просмотра буфера обмена необходим для обработки сообщений   WM_DRAWCLIPBOARD, \VM_CHANGECBCHAIN и WM_DESTROY.

Синтаксис

HWND SetClipboardViewer ( HWND hWnd )

Параметры

hWnd

HWND: Дескриптор окна, добавляемого к цепочке окон просмотра буфера обмена.

Возвращаемое значение

HWND: Дескриптор следующего окна цепочки.

Включаемый файл

winuser.h

См. также

ChangeClipboardChain

Связанные сообщения WM_DRAWCLIPBOARD, WM_CHANGECHAIN

Пример

См. пример, приведенный в описании функции ChangeClipboardChain листинга окна просмотра буфера обмена, в котором обрабатываются текстовые данные и растровое изображение.