Составители:
Рубрика:
между приложениями.
Прежде чем приложение начнет читать, записывать или удалять содержи-
мое буфера обмена, необходимо запросить доступ к нему с помощью функции
OpenClipboard(). Эта функция возвращает значение TRUE,
если буфер открыт
и доступ к нему разрешен, и значение FALSE,
если доступ к буферу запрещен
по той причине, что в данный момент право доступа принадлежит другому
приложению.
Закончив работу с буфером обмена, приложение должно вызвать функцию
CloseClipboard(), которая делает буфер доступным для других программ.
Следует отметить, что каждый вызов функции OpenClipboard() всегда
должен сопровождаться вызовом функции CloseClipboard(). Приложение не
должно пытаться длительное время удерживать буфер обмена открытым,
а должно стремиться отдать контроль над ним как можно быстрее.
Для записи данных в Clipboard можно использовать универсальную функ-
цию TransferToClipboard(), копирующую блок памяти в буфер обмена [2]:
BOOL TransferToClipboard( HWND hwnd, HANDLE hMemBlock,
WORD FormatCB )
{
if(OpenClipboard (hwnd))
{
EmptyClipboard();
SetClipbpardData(FormatCB, hMemBlock);
CloseClipboard ();
return(TRUE);
}
return(FALSE);
}…
Функция TransferToClipboard() начинается с запроса на право доступа
к буферу обмена. Затем в буфер копируется одиночный блок памяти. Наконец,
функция закрывает буфер обмена, освобождая его для доступа другим приложе-
ниям. Функция TransferToClipboard() имеет довольно универсальную структуру
и допускает любой тип дескриптора hMemBlock. Однако для ее работы необходим
параметр FormatCB, указывающий тип данных, копируемых в буфер обмена.
Термин блок памяти не подразумевает блок какого-то определенного
размера. Размер блока был определен ранее функцией GlobalAlloc().
Каждый блок памяти может содержать абзац текста, несколько записей или
другие данные, но обязательно одного типа [2].
А как быть, если приложение должно передать в буфер обмена смешан-
ные данные: скажем, растровое изображение, метафайл, палитру и фрагмент
текста? Решение этой проблемы довольно простое. Сначала каждый фраг-
мент данных копируется отдельно в глобальную выделенную память с со-
хранением дескриптора блока памяти, например hBitmap, hMetafile, hPalette и
hText. После этого открывается и освобождается буфер обмена и в него пере-
82
между приложениями.
Прежде чем приложение начнет читать, записывать или удалять содержи-
мое буфера обмена, необходимо запросить доступ к нему с помощью функции
OpenClipboard(). Эта функция возвращает значение TRUE, если буфер открыт
и доступ к нему разрешен, и значение FALSE, если доступ к буферу запрещен
по той причине, что в данный момент право доступа принадлежит другому
приложению.
Закончив работу с буфером обмена, приложение должно вызвать функцию
CloseClipboard(), которая делает буфер доступным для других программ.
Следует отметить, что каждый вызов функции OpenClipboard() всегда
должен сопровождаться вызовом функции CloseClipboard(). Приложение не
должно пытаться длительное время удерживать буфер обмена открытым,
а должно стремиться отдать контроль над ним как можно быстрее.
Для записи данных в Clipboard можно использовать универсальную функ-
цию TransferToClipboard(), копирующую блок памяти в буфер обмена [2]:
BOOL TransferToClipboard( HWND hwnd, HANDLE hMemBlock,
WORD FormatCB )
{
if(OpenClipboard (hwnd))
{
EmptyClipboard();
SetClipbpardData(FormatCB, hMemBlock);
CloseClipboard ();
return(TRUE);
}
return(FALSE);
}…
Функция TransferToClipboard() начинается с запроса на право доступа
к буферу обмена. Затем в буфер копируется одиночный блок памяти. Наконец,
функция закрывает буфер обмена, освобождая его для доступа другим приложе-
ниям. Функция TransferToClipboard() имеет довольно универсальную структуру
и допускает любой тип дескриптора hMemBlock. Однако для ее работы необходим
параметр FormatCB, указывающий тип данных, копируемых в буфер обмена.
Термин блок памяти не подразумевает блок какого-то определенного
размера. Размер блока был определен ранее функцией GlobalAlloc().
Каждый блок памяти может содержать абзац текста, несколько записей или
другие данные, но обязательно одного типа [2].
А как быть, если приложение должно передать в буфер обмена смешан-
ные данные: скажем, растровое изображение, метафайл, палитру и фрагмент
текста? Решение этой проблемы довольно простое. Сначала каждый фраг-
мент данных копируется отдельно в глобальную выделенную память с со-
хранением дескриптора блока памяти, например hBitmap, hMetafile, hPalette и
hText. После этого открывается и освобождается буфер обмена и в него пере-
82
Страницы
- « первая
- ‹ предыдущая
- …
- 80
- 81
- 82
- 83
- 84
- …
- следующая ›
- последняя »
