3.18.1.15 - Функция SetClipboardData

(УстановкаДанныхВБуферОбмена)

Функция SetClipboardData помещает данные в буфер обмена в заданном формате. Окно должно быть текущим владельцем буфера обмена, а прикладная программа, должна вызвать функцию OpenClipboard. (При ответе на сообщения WM_RENDERFORMAT и WM_RENDERALLFORMATS, владелец буфера обмена не должен вызвать OpenClipboard перед вызовом SetClipboardData.)

Синтаксис

HANDLE SetClipboardData
(
	UINT uFormat,		// формат буфера обмена
	HANDLE hMem		// дескриптор данных
);

Параметры
uFormat
Определяет формат буфера обмена. Этот параметр может быть зарегистрированным форматом или любым из стандартных форматов буфера обмена, перечисленных в ниже следующем разделе Замечания. За информацией о зарегистрированных форматах буфера обмена обратитесь к статье о функции RegisterClipboardFormat.
hMem
Идентифицирует данные в заданном формате. Этот параметр может иметь значение ПУСТО (NULL), указывая, что окно предоставляет данные в заданном формате буфера обмена (представляет формат) после запроса. Если окно задерживает его представление, оно должно обработать сообщения WM_RENDERFORMAT и WM_RENDERALLFORMATS.
Как только вызывается функция SetClipboardData, система идентифицирует владельца объекта при помощи параметра hMem. Прикладная программа может считывать данные, но не должна освобождать или оставлять заблокированным дескриптор. Если параметр hMem идентифицирует объект в памяти, объект, должен быть помещен, используя функцию GlobalAlloc с флажками GMEM_DDESHARE и GMEM_MOVEABLE.

Возвращаемые значения
Если функция завершается успешно, возвращаемое значение - дескриптор данных.
Если функция завершается с ошибкой, возвращаемое значение ПУСТО (NULL). Чтобы получить дополнительные данные об ошибке, вызовите функцию GetLastError.

Замечания
Параметр uFormat может идентифицировать зарегистрированный формат буфера обмена или он может быть одним из следующих значений:

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

Формат буфера обмена	Преобразованный формат	Поддерживающая платформа
CF_BITMAP			CF_DIB			Windows NT, Windows 95
CF_DIB			CF_BITMAP			Windows NT, Windows 95
CF_DIB			CF_PALETTE		Windows NT, Windows 95
CF_ENHMETAFILE		CF_METAFILEPICT		Windows NT, Windows 95
CF_METAFILEPICT		CF_ENHMETAFILE		Windows NT, Windows 95
CF_OEMTEXT		CF_TEXT			Windows NT, Windows 95
CF_OEMTEXT		CF_UNICODETEXT		Windows NT
CF_TEXT			CF_OEMTEXT		Windows NT, Windows 95
CF_TEXT			CF_UNICODETEXT		Windows NT
CF_UNICODETEXT		CF_OEMTEXT		Windows NT
CF_UNICODETEXT		CF_TEXT			Windows NT

Если операционная система обеспечивает автоматическое преобразование типов для собственного формата буфера обмена, не имеется никакого преимущества для размещения преобразованного формата(ов) в буфере обмена.
При копировании точечных рисунков, лучше всего в буфер обмена поместить только формат CF_DIB. Это делается так потому, что цвета в аппаратно-зависимом точечном рисунке (CF_BITMAP) - относятся к палитре системы, которая может измениться до того, как точечный рисунок будет вставлен. Если же в буфере обмена формат CF_DIB, а окно запрашивает формат CF_BITMAP, система представляет аппаратно-зависимый точечный рисунок, использующий текущую палитру на этот момент.
Если Вы помещаете формат CF_BITMAP в буфер обмена (а не CF_DIB), система переведет его в формат буфера обмена CF_DIB, как только буфер обмена будет закрыт. Это гарантия того, что используется правильная палитра, чтобы создать не зависящий от устройства точечный рисунок (DIB). Преобразования между другими форматами буфера обмена происходят после запроса.
Платформы Windows поддерживают два формата буфера обмена для метафайлов: CF_ENHMETAFILE и CF_METAFILEPICT. Устанавливайте CF_ENHMETAFILE для расширенных метафайлов и CF_METAFILEPICT для метафайлов Windows.

Смотри также
BITMAPINFO, GetClipboardData, GlobalAlloc, GlobalFree, METAFILEPICT, OpenClipboard, RealizePalette, RegisterClipboardFormat, SelectPalette, WM_ASKCBFORMATNAME, WM_DESTROYCLIPBOARD, WM_HSCROLLCLIPBOARD, WM_PAINTCLIPBOARD, WM_RENDERFORMAT, WM_RENDERALLFORMATS, WM_SIZECLIPBOARD, WM_VSCROLLCLIPBOARD

Размещение и совместимость SetClipboardData

Windows NT			Да 
Win95				Да 
Win32s				Да 
Импортируемая библиотека		user32.lib
Заголовочный файл			winuser.h 
Unicode				Нет 
Замечания по платформе		Не имеется

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Владимир Соковиков - 16.02.2002