Составители:
Рубрика:
дается каждый из дескрипторов:
if(OpenClipboard(hwnd))
{
EmptyClipboard();
SetClipboardData(CF_BITMAP, hBitmap);
SetClipboardData(CF_PALETTE, hPalette);
SetClipboardData(CF_METAFILEPICT, hMetaFile);
SetClipboardData(CF_TEXT, hText);
CloseClipboard();
}…
После этого буфер обмена закрывается и освобождается для доступа
к нему других приложений. Правда, реализовать описанный выше подход на
практике достаточно сложно. Но поскольку идентификаторы форматов данных
имеют тип WORD,
а все дескрипторы также могут быть приведены к единому
типу HANDLE,
гораздо удобнее собрать идентификаторы и дескрипторы
в массивы, а функции TransferToClipboard() передать дополнительный параметр,
указывающий количество записанных элементов данных:
if(OpenClipboard(hwnd))
{
EmptyClipboard();
for(I = 0; I < nCount; i++)
SetClipboardData(cfType[i], hData[i]);
CloseClipboard();
}…
Прежде чем начинать чтение информации из буфера обмена, необходимо
определить, данные какого типа в нем содержатся [2]. А поскольку для раз-
личных типов данных необходимо применять разные операции, приложение
должно заранее знать, что именно ему придется читать, и подготовиться к оп-
ределенному виду обработки. В частности, вы можете запросить данные опре-
деленного типа и посмотреть на результат. Однако такой подход не слишком
элегантен, да и эффективность его не очень высока.
Более эффективный способ анализа содержимого буфера обмена заключа-
ется в использовании API-функции IsClipboardFormatAvailable() или Enum-
ClipboardFormats().
Функция IsClipboardFormatAvailable() возвращает булево значение, кото-
рое сообщает, содержит ли буфер обмена данные нужного формата. Синтак-
сис вызова функции имеет следующий вид:
if( IsClipboardFormatAvailable(CF_xxxx))…
Функция EnumClipboardFormats() проверяет наличие данных всех возмож-
ных форматов. При первом вызове функции с параметром NULL
она возвращает
информацию о первом доступном формате. При каждом последующем вызове
83
дается каждый из дескрипторов:
if(OpenClipboard(hwnd))
{
EmptyClipboard();
SetClipboardData(CF_BITMAP, hBitmap);
SetClipboardData(CF_PALETTE, hPalette);
SetClipboardData(CF_METAFILEPICT, hMetaFile);
SetClipboardData(CF_TEXT, hText);
CloseClipboard();
}…
После этого буфер обмена закрывается и освобождается для доступа
к нему других приложений. Правда, реализовать описанный выше подход на
практике достаточно сложно. Но поскольку идентификаторы форматов данных
имеют тип WORD, а все дескрипторы также могут быть приведены к единому
типу HANDLE, гораздо удобнее собрать идентификаторы и дескрипторы
в массивы, а функции TransferToClipboard() передать дополнительный параметр,
указывающий количество записанных элементов данных:
if(OpenClipboard(hwnd))
{
EmptyClipboard();
for(I = 0; I < nCount; i++)
SetClipboardData(cfType[i], hData[i]);
CloseClipboard();
}…
Прежде чем начинать чтение информации из буфера обмена, необходимо
определить, данные какого типа в нем содержатся [2]. А поскольку для раз-
личных типов данных необходимо применять разные операции, приложение
должно заранее знать, что именно ему придется читать, и подготовиться к оп-
ределенному виду обработки. В частности, вы можете запросить данные опре-
деленного типа и посмотреть на результат. Однако такой подход не слишком
элегантен, да и эффективность его не очень высока.
Более эффективный способ анализа содержимого буфера обмена заключа-
ется в использовании API-функции IsClipboardFormatAvailable() или Enum-
ClipboardFormats().
Функция IsClipboardFormatAvailable() возвращает булево значение, кото-
рое сообщает, содержит ли буфер обмена данные нужного формата. Синтак-
сис вызова функции имеет следующий вид:
if( IsClipboardFormatAvailable(CF_xxxx))…
Функция EnumClipboardFormats() проверяет наличие данных всех возмож-
ных форматов. При первом вызове функции с параметром NULL она возвращает
информацию о первом доступном формате. При каждом последующем вызове
83
Страницы
- « первая
- ‹ предыдущая
- …
- 81
- 82
- 83
- 84
- 85
- …
- следующая ›
- последняя »
