Составители:
ется в виде глобального блока памяти, начинающегося с заголовка BITMAPINFO, после
которого следуют данные изображения.
Передав растровое изображение в буфер обмена, исходное приложение не имеет
возможности обратиться к соответствующему глобальному блоку памяти, не запросив
доступ к буферу обмена.
Форматы палитры и пера. Форматы CF_PALETTE и CF_PENDATA служат для
передачи в буфер обмена дескриптора цветовой палитры и дескриптора пера соответст-
венно. Формат CF_PALETTE часто применяется в сочетании с форматом CF_DIB для
записи цветовой палитры, используемой растровым изображением.
Wave-формат. Формат CF_WAVE предназначен для передачи между различными
приложениями аудиоинформации.
Форматы специального назначения. Три следующих формата изначально пред-
назначались для применения в специализированных приложениях.
• Формат CF_TIFF используется для передачи данных в формате TIFF (Tagged Image
File Format).
• Формат CF_DIF служит для передачи данных в формате DIF (Data Interchange For-
mat), который был предложен фирмой Software Arts и первоначально применялся в
редакторе электронных таблиц VisiCalc. Теперь лицензия на данный формат при-
надлежит фирме Lotus. DIF-формат основан на ASCII-строках, завершающихся па-
рой символов CR/LF (возврат каретки/перевод строки).
• Формат CF_SYLK предназначен для передачи данных в формате Microsoft Symbolic
Link, который первоначально применялся для обмена данных между Microsoft-
приложениями Multiplan (электронные таблицы), Chart и Excel. Этот формат осно-
ван на ASCII-строках, завершающихся парой символов CR/LF (возврат карет-
ки/перевод строки).
8.1.2. Операции с буфером обмена
Управление глобальными блоками памяти, которые содержат данные, помещенные
в буфер обмена, осуществляется с помощью флагов выделения памяти. При записи ин-
формации в буфер программа выделяет блок памяти с помощью функции GlobalAlloc()
и флага GHND (определенного как GMEM_MOVABLE | GMEM_ZEROINIT).
Обычно при закрытии исходного приложения выделенная ему глобальная область
памяти удаляется (освобождается) операционной системой. Но если приложение вызо-
вет функцию SetClipboardData() с указанием дескриптора глобального блока памяти,
Windows возьмет этот блок в свою собственность, а точнее, в собственность буфера об-
мена, изменив флаги выделения.
Принадлежность глобального блока памяти назначается функцией GlobalRealloc():
GlobalRealloc( hMem, NULL, GMEM_MODIFY | GMEM_DDESHARE );
После этого вызова выделенный блок памяти исходному приложению не принад-
лежит и доступен только через буфер обмена, с помощью функции GetClipboardData().
Эта функция предоставляет вызвавшему ее приложению временный доступ к данным,
записанным в буфере обмена, передавая программе дескриптор глобального блока памя-
ти. Однако принадлежность блока данных по-прежнему сохраняется за буфером обмена,
а не передается приложению.
Следовательно, данные, записанные в буфере обмена, могут быть удалены только
путем вызова функции EmptyClipboard.
167
ется в виде глобального блока памяти, начинающегося с заголовка BITMAPINFO, после которого следуют данные изображения. Передав растровое изображение в буфер обмена, исходное приложение не имеет возможности обратиться к соответствующему глобальному блоку памяти, не запросив доступ к буферу обмена. Форматы палитры и пера. Форматы CF_PALETTE и CF_PENDATA служат для передачи в буфер обмена дескриптора цветовой палитры и дескриптора пера соответст- венно. Формат CF_PALETTE часто применяется в сочетании с форматом CF_DIB для записи цветовой палитры, используемой растровым изображением. Wave-формат. Формат CF_WAVE предназначен для передачи между различными приложениями аудиоинформации. Форматы специального назначения. Три следующих формата изначально пред- назначались для применения в специализированных приложениях. • Формат CF_TIFF используется для передачи данных в формате TIFF (Tagged Image File Format). • Формат CF_DIF служит для передачи данных в формате DIF (Data Interchange For- mat), который был предложен фирмой Software Arts и первоначально применялся в редакторе электронных таблиц VisiCalc. Теперь лицензия на данный формат при- надлежит фирме Lotus. DIF-формат основан на ASCII-строках, завершающихся па- рой символов CR/LF (возврат каретки/перевод строки). • Формат CF_SYLK предназначен для передачи данных в формате Microsoft Symbolic Link, который первоначально применялся для обмена данных между Microsoft- приложениями Multiplan (электронные таблицы), Chart и Excel. Этот формат осно- ван на ASCII-строках, завершающихся парой символов CR/LF (возврат карет- ки/перевод строки). 8.1.2. Операции с буфером обмена Управление глобальными блоками памяти, которые содержат данные, помещенные в буфер обмена, осуществляется с помощью флагов выделения памяти. При записи ин- формации в буфер программа выделяет блок памяти с помощью функции GlobalAlloc() и флага GHND (определенного как GMEM_MOVABLE | GMEM_ZEROINIT). Обычно при закрытии исходного приложения выделенная ему глобальная область памяти удаляется (освобождается) операционной системой. Но если приложение вызо- вет функцию SetClipboardData() с указанием дескриптора глобального блока памяти, Windows возьмет этот блок в свою собственность, а точнее, в собственность буфера об- мена, изменив флаги выделения. Принадлежность глобального блока памяти назначается функцией GlobalRealloc(): GlobalRealloc( hMem, NULL, GMEM_MODIFY | GMEM_DDESHARE ); После этого вызова выделенный блок памяти исходному приложению не принад- лежит и доступен только через буфер обмена, с помощью функции GetClipboardData(). Эта функция предоставляет вызвавшему ее приложению временный доступ к данным, записанным в буфере обмена, передавая программе дескриптор глобального блока памя- ти. Однако принадлежность блока данных по-прежнему сохраняется за буфером обмена, а не передается приложению. Следовательно, данные, записанные в буфере обмена, могут быть удалены только путем вызова функции EmptyClipboard. 167
Страницы
- « первая
- ‹ предыдущая
- …
- 163
- 164
- 165
- 166
- 167
- …
- следующая ›
- последняя »