Основы программирования в Win32API. Марапулец Ю.В. - 81 стр.

UptoLike

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

предназначались для применения в специализированных приложениях:
1. Формат CF_TIFF
используется для передачи данных в формате TIFF
(Tagged Image File Format).
2. Формат CF_DIF
служит для передачи данных в формате DIF (Data In-
terchange Format), который был предложен фирмой Software Arts
и первоначально применялся в редакторе электронных таблиц VisiCalc. Теперь
лицензия на данный формат принадлежит фирме Lotus. DIF-формат основан на
ASCII-строках, завершающихся парой символов CR/LF (возврат карет-
ки/перевод строки).
3. Формат CF_SYLK
предназначен для передачи данных в формате Mi-
crosoft Symbolic Link, который первоначально применялся для обмена данных
между Microsoft-приложениями Multiplan (электронные таблицы), Chart и Ex-
cel. Этот формат основан на ASCII-строках, завершающихся парой символов
CR/LF (возврат каретки/перевод строки).
6.2. Операции с буфером обмена Windows
Управление глобальными блоками памяти, которые содержат данные, по-
мещенные в буфер обмена, осуществляется с помощью флагов выделения па-
мяти. При записи информации в буфер программа выделяет блок памяти
с помощью функции GlobalAlloc() и флага GHND
(определенного как
GMEM_MOVABLE
| GMEM_ZEROINIT).
Обычно при закрытии исходного приложения выделенная ему глобальная
область памяти удаляется (освобождается) операционной системой. Но если
приложение вызовет функцию SetClipboardData() с указанием дескриптора гло-
бального блока памяти, Windows возьмет этот блок в свою собственность, точ-
нее, в собственность буфера обмена, изменив флаги выделения.
Принадлежность глобального блока памяти назначается функцией Globa-
lRealloc():
GlobalRealloc( hMem, NULL, GMEM_MODIFY | GMEM_DDESHARE );…
После этого вызова выделенный блок памяти не принадлежит исходному
приложению и доступен только через буфер обмена с помощью функции Get-
ClipboardData(). Эта функция предоставляет вызвавшему ее приложению вре-
менный доступ к данным, записанным в буфере обмена, передавая программе
дескриптор глобального блока памяти. Однако принадлежность блока данных
по-прежнему сохраняется за буфером обмена, а не передается приложению.
Следовательно, данные, записанные в буфере обмена, могут быть удалены толь-
ко путем вызова функции EmptyClipboard().
Хотя многие ресурсы Windows предназначены для совместного использо-
вания несколькими приложениями, доступ к буферу обмена в каждый момент
возможен только одной программой. Это позволяет предотвратить конфликты
81
предназначались для применения в специализированных приложениях:
     1. Формат CF_TIFF используется для передачи данных в формате TIFF
(Tagged Image File Format).
     2. Формат CF_DIF служит для передачи данных в формате DIF (Data In-
terchange Format), который был предложен фирмой Software Arts
и первоначально применялся в редакторе электронных таблиц VisiCalc. Теперь
лицензия на данный формат принадлежит фирме Lotus. DIF-формат основан на
ASCII-строках, завершающихся парой символов CR/LF (возврат карет-
ки/перевод строки).
     3. Формат CF_SYLK предназначен для передачи данных в формате Mi-
crosoft Symbolic Link, который первоначально применялся для обмена данных
между Microsoft-приложениями Multiplan (электронные таблицы), Chart и Ex-
cel. Этот формат основан на ASCII-строках, завершающихся парой символов
CR/LF (возврат каретки/перевод строки).



                6.2. Операции с буфером обмена Windows

     Управление глобальными блоками памяти, которые содержат данные, по-
мещенные в буфер обмена, осуществляется с помощью флагов выделения па-
мяти. При записи информации в буфер программа выделяет блок памяти
с помощью функции GlobalAlloc() и флага GHND (определенного как
GMEM_MOVABLE | GMEM_ZEROINIT).
     Обычно при закрытии исходного приложения выделенная ему глобальная
область памяти удаляется (освобождается) операционной системой. Но если
приложение вызовет функцию SetClipboardData() с указанием дескриптора гло-
бального блока памяти, Windows возьмет этот блок в свою собственность, точ-
нее, в собственность буфера обмена, изменив флаги выделения.
     Принадлежность глобального блока памяти назначается функцией Globa-
lRealloc():
GlobalRealloc( hMem, NULL, GMEM_MODIFY | GMEM_DDESHARE );…
     После этого вызова выделенный блок памяти не принадлежит исходному
приложению и доступен только через буфер обмена с помощью функции Get-
ClipboardData(). Эта функция предоставляет вызвавшему ее приложению вре-
менный доступ к данным, записанным в буфере обмена, передавая программе
дескриптор глобального блока памяти. Однако принадлежность блока данных
по-прежнему сохраняется за буфером обмена, а не передается приложению.
Следовательно, данные, записанные в буфере обмена, могут быть удалены толь-
ко путем вызова функции EmptyClipboard().
     Хотя многие ресурсы Windows предназначены для совместного использо-
вания несколькими приложениями, доступ к буферу обмена в каждый момент
возможен только одной программой. Это позволяет предотвратить конфликты

                                    81