Операционная система Microsoft Windows 3.1 для программиста. Дополнительные главы

Функции для работы с Clipboard


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

Перед тем как выполнить запись или чтение данных, приложение должно получить доступ к Clipboard, открыв ее при помощи функции OpenClipboard:

BOOL WINAPI OpenClipboard(HWND hwnd);

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

Если доступ к Clipboard получен, функция OpenClipboard вернет значение TRUE. Если же Clipboard уже открыт другим приложением, эта функция вернет значение FALSE.

После использования приложение должно закрыть Clipboard, вызвав функцию CloseClipboard:

BOOL WINAPI CloseClipboard(void);

Эта функция в случае успеха возвращает значение TRUE, а в случае ошибки - FALSE.

Содержимое открытого Clipboard может быть сброшено функцией EmptyClipboard:

BOOL WINAPI EmptyClipboard(void);

Функция EmptyClipboard возвращает значение TRUE при нормальном завершении или FALSE при ошибке.

Для выполнения записи данных в Clipboard приложение должно использовать функцию SetClipboardData:

HANDLE WINAPI SetClipboardData(UINT uFormat, HANDLE hData);



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

Для параметра uFormat вы можете использовать константу, соответствующую одному из предопределенных форматов, или полученную от функции RegisterClipboardFormat.

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

Приведем список предопределенных форматов данных для Clipboard.


Соответствующие константы определены в файле windows.h.

Константа Описание формата данных
CF_TEXT Текстовые данные в виде массив символов. Каждая строка завершается комбинацией символов "\r\n", весь массив закрыт двоичным нулем
CF_OEMTEXT Аналогично предыдущему, однако буфер содержит символы в кодировке OEM
CF_BITMAP Битовое изображение в формате, который зависит от устройства отображения (DDB)
CF_METAFILEPICT Метафайл
CF_DIB Битовое изображение в формате, который не зависит от устройства отображения (DIB)
CF_PALETTE Палитра цветов. Используется при записи в Clipboard битовых изображений DIB
CF_SYLK Формат Microsoft Symbolic Link. Этот формат предназначен для передачи текстовых данных, причем каждая строка заканчивается комбинацией символов "\r\n". Используется в некоторых программных продуктах Microsoft
CF_DIF Формат Data Interchange Format. Аналогично формату CF_SYLK, формат CF_DIF предназначен для передачи текстовых данных
CF_TIFF Графическое изображение в формате Tag Image File Format, который был разработан Microsoft, Aldus Corporation и Hewlett-Packard
CF_PENDATA Этот формат данных используется в расширении операционной системы Windows, педназначенном для работы с перьевым вводом
CF_RIFF Формат Resource Interchange File Format. Мы рассказывали о нем в томе "Библиотеки системного программиста", посвященном системам мультимедиа
CF_WAVE Звуковые данные. Подмножество формата Resource Interchange File Format
CF_OWNERDISPLAY Формат данных определяется приложением, записавшим такие данные в Clipboard. Это же приложение отвечает за отображение данных
CF_DSPTEXT Текстовое представление данных, формат которых определен приложением
CF_DSPBITMAP Представление данных, формат которых определен приложением, в виде битового изображения
CF_DSPMETAFILEPICT Представление данных, формат которых определен приложением, в виде метафайла
Для чтения данных из Clipboard используется функция GetClipboardData:

HANDLE WINAPI GetClipboardData(UINT uFormat);

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

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


Содержание раздела