Основы программирования в Win32API. Марапулец Ю.В. - 83 стр.

UptoLike

Составители: 

дается каждый из дескрипторов:
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