Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
os5.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
494.08 Кб
Скачать

5.3.3. Обмен данными через Clipboard

Вопрос (

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

)Вопрос

Традиционным способом использования Clipboard является обмен данными при участии пользователя.

Однако и другие, более развитые средства обмена данными, такие как DDE и OLE, используют концепции Clipboard в своей основе.

Вопрос (

Важнейшей концепцией Clipboard является концепция формата данных.

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

Эта стандартизация позволила снять с пользователя проблемы преобразования данных при передаче их из одного приложения в другое, что и способствовало широкому распространению Clipboard. Среда сама берет на себя проблемы преобразования данных на основе ряда стандартных форматов.

)Вопрос

Стандартизация форматов, однако, не ограничивает возможности их расширения.

Вопрос (

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

RegisterClipboardFormat(строка с именем нового формата),

передав этой функции имя формата.

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

Таким образом, все приложения будут пользоваться одним и тем же идентификатором для обмена данными, представленными в этом формате.

)Вопрос

Стандартные форматы данных обозначаются константами, имеющими символические имена. Приведем в качестве примера пару таких форматов:

  1. cf_Text - ASCIIZ строка;

  2. cf_BitMap - один из форматов графического изображения.

Существует еще несколько (~25) стандартных форматов данных, поддерживаемых Clipboard.

Ниже мы рассмотрим порядок обмена данными через Clipboard с точки зрения программиста, а не пользователя.

Передача данных в Clipboard

Вопрос (

Передача данных в Clipboard включает в себя ряд этапов.

  1. Подготовка данных для передачи в Clipboard;

  2. Открытие Clipboard;

  3. Очистка Clipboard;

  4. Посылка данных в Clipboard;

  5. Закрытие Clipboard.

)Вопрос

1. Подготовка данных для передачи в Clipboard;

Посылку данных рассмотрим на примере передачи в Clipboard ASCIIZ - строки.

Вопрос (

1) Выделяем блок динамической памяти:

HGLOBAL GHandle = GlobalAlloc(GMEM_MOVEABLE, strlen(P) + 1);

Где:

HGLOBAL GHandle - ссылка на блок динамической памяти;

P - указатель на передаваемую строку.

2) Фиксируем блок от перемещений на время передачи в него данных и одновременно получаем указатель на блок:

LPTSTR GPtr = (LPTSTR)GlobalLock(GHandle);

Где: GPtr - указатель на блок.

3) Копируем строку в память:

strcpy(GPtr, P);

4) Разрешаем перемещение блока памяти:

GlobalUnlock(GHandle);

)Вопрос

2. Открытие Clipboard

Вопрос (

Открытие Clipboard выполняется вызовом функции

OpenClipboard(),

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

)Вопрос

Вопрос (

3. Очистка Clipboard

Очистка Clipboard выполняется вызовом функции

EmptyClipboard(),

перед засылкой туда новых данных.

4. Посылка данных в Clipboard

Посылка данных в Clipboard заключается в передаче Clipboard ссылки на блок данных с указанием формата этих данных. Эти действия осуществляются с помощью функции:

SetClipboardData(cf_Text, GHandle).

После вызова этой функции Clipboard начинает владеть данными.

5. Закрытие Clipboard

Закрытие Clipboard выполняется вызовом функции

CloseClipboard(),

после которого Clipboard становится доступным другим приложениям.

)Вопрос

Прием данных из Clipboard

Вопрос (

Прием данных из Clipboard включает в себя следующие этапы:

  1. Открытие Clipboard;

  2. Проверка наличия требуемого формата данных в Clipboard;

  3. Чтение данных из Clipboard;

  4. Закрытие Clipboard.

)Вопрос

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]