Составители:
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();
}
Прежде чем начинать чтение информации из буфера обмена, необходимо опре-
делить, данные какого типа содержатся в нем [12]. А поскольку для различных типов
данных необходимо применять разные операции, приложение должно заранее знать, что
именно ему придется читать, и подготовиться к определенному виду обработки. В част-
ности, вы можете запросить данные определенного типа и посмотреть на результат. Од-
нако такой подход не слишком элегантен, да и эффективность его не очень высока.
Более эффективный способ анализа содержимого буфера обмена заключается в ис-
пользовании API-функции IsClipboardFormatAvailable() или EnumClipboardFormats().
Функция IsClipboardFormatAvailable() возвращает булево значение, которое сооб-
щает, содержит ли буфер обмена данные нужного формата. Синтаксис вызова функции
таков:
if( IsClipboardFormatAvailable( CF_xxxx ) )
Функция EnumClipboardFormats проверяет наличие данных всех возможных фор-
матов. При первом вызове функции с параметром NULL
она возвращает информацию о
первом доступном формате. При каждом последующем вызове возвращаются сведения о
других форматах. Таким образом, для получения списка форматов можно воспользо-
ваться следующим алгоритмом:
wFormat = NULL;
OpenClipboard( hwnd );
while( wFormat = EnumClipboardFormats( wFormat ) )
{
... код обработки различных форматов ...
}
CloseClipboard() ;
В этом списке используемые форматы будут перечислены в том порядке, в кото-
ром исходное приложение записывало в буфер обмена соответствующие данные, Это
169
SetClipboardData( CF_METAFILEPICT, hMetaFile );
SetClipboardData( CF_TEXT, hText );
CloseClipboard();
}
После этого буфер обмена закрывается и освобождается для доступа к нему других
приложений.
Правда, реализовать описанный выше подход на практике достаточно сложно. Но
поскольку идентификаторы форматов данных имеют тип WORD, а все дескрипторы
также могут быть приведены к единому типу HANDLE, гораздо удобнее собрать иден-
тификаторы и дескрипторы в массивы, а функции TransferToClipboard() передать допол-
нительный параметр, указывающий количество записанных элементов данных.
if( OpenClipboard( hwnd ) )
{
EmptyClipboard() ;
for( i=0; iСтраницы
- « первая
- ‹ предыдущая
- …
- 165
- 166
- 167
- 168
- 169
- …
- следующая ›
- последняя »
