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

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;

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

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

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

1. Открытие Clipboard

Открытие Clipboard выполняется аналогично предыдущему случаю вызовом функции:

OpenClipboard().

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

Проверка наличия требуемого формата данных выполняется вызовом функции:

IsClipboardFormatAvailable(cf_Text),

которая возвращает True, если данные запрашиваемого формата присутствуют.

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

Чтение данных, в случае успешного выполнения всех предыдущих операций, выполняется за несколько шагов:

1) Получение ссылки на блок памяти, содержащий данные требуемого формата:

HGLOBAL GHandle = GetClipboardData(cf_Text);

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

LPTSTR GPtr = (LPTSTR)GlobalLock(GHandle);

3) Выделение локальной памяти для чтения в нее интересующих данных:

P = malloc(strlen(GPtr) + 1));

4) Копирование данных из глобальной памяти в локальную память:

strcpy(P, GPtr);

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

GlobalUnlock(GHandle).

4. Закрытие Clipboard

Закрытие Clipboard в случае приема данных выполняется аналогично закрытию в случае передачи данных:

CloseClipboard().

Как видно из приведенного описания, для программной реализации обмена данными через Clipboard требуется выполнения достаточно большого количества действий. При этом, реализация обмена для других, более сложных форматов, таких, например, как «графическое изображение», становится еще более сложной.

Соседние файлы в предмете Операционные системы