Операционные системы. Учебное пособие. Марапулец Ю.В. - 165 стр.

UptoLike

Составители: 

ется в виде глобального блока памяти, начинающегося с заголовка 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