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

UptoLike

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

1. Прежде чем копировать данные в буфер обмена, необходимо вызвать
функцию EmptyClipboard(), предназначенную для удаления текущего содержи-
мого. Сам факт доступа к буферу обмена еще не означает, что будет получен
контроль над его содержимым. Функция EmptyClipboard() позволяет стать вла-
дельцем буфера и одновременно удалить его текущее содержимое.
2. Любое приложение может получить доступ к содержимому буфера
обмена, но лишь владелец буфера, т. е. приложение, вызвавшее функцию
EmptyClipboard(), имеет право записывать в него данные. Поскольку владель-
цем буфера обмена может быть только одно приложение, данные, записанные
предыдущим владельцем, удаляются, даже если таковым было это же самое
приложение.
3. Хотя в буфер обмена может быть записано несколько блоков данных,
передавать их нужно в течение одной операции. Буфер обмена нельзя открыть,
записать в него данные, закрыть, а затем снова открыть и добавить другие
данные, не удалив предыдущий фрагмент.
4. В буфере обмена одновременно может находиться только по одному
элементу данных каждого типа. Объясняется это той простой причиной, что не
существует способа разделения нескольких элементов данных одного и того
же типа. Однако при наличии данных нескольких типов приложение, полу-
чившее доступ к буферу обмена, может запросить только один элемент, не-
сколько элементов или все элементы. В этом случае данные каждого типа
должны запрашиваться отдельно.
Буфер обмена может многократно открываться для запроса других элементов
данных или повторного запроса того же элемента. Но в целом, запрашивая фраг-
мент данных из буфера обмена, лучше всего создать его локальную копию, а не
повторять один и тот же запрос снова и снова. Кроме того, не забывайте: нет ника-
кой гарантии того, что при следующем запросе тот же самый элемент данных ос-
танется неизменным, поскольку буфер обмена является общедоступным.
6.3. Операции со специальными форматами буфера обмена Windows
В Windows определено несколько «частных» форматов: CF_DSPTEXT,
CF_DSPBITМАР, CF_DSPMETAFILEPICT и CF_DSPENHMETAFILE. Они со-
ответствуют форматам CF_TEXT, CF_BITMAP, CF_METAFILEPICT
и CF_ENHMETAFILE, но имеют одно принципиальное ограничение: прило-
жения, запрашивающие стандартные форматы, не смогут получить доступ к
специальным форматам буфера обмена. В этой связи следует сделать несколь-
ко замечаний:
данные, находящиеся в одном из специальных форматов, предназна-
чаются для обмена информацией между двумя экземплярами одного и того же
приложения или между двумя приложениями, специально разработанными для
совместной работы;
85
     1. Прежде чем копировать данные в буфер обмена, необходимо вызвать
функцию EmptyClipboard(), предназначенную для удаления текущего содержи-
мого. Сам факт доступа к буферу обмена еще не означает, что будет получен
контроль над его содержимым. Функция EmptyClipboard() позволяет стать вла-
дельцем буфера и одновременно удалить его текущее содержимое.
     2. Любое приложение может получить доступ к содержимому буфера
обмена, но лишь владелец буфера, т. е. приложение, вызвавшее функцию
EmptyClipboard(), имеет право записывать в него данные. Поскольку владель-
цем буфера обмена может быть только одно приложение, данные, записанные
предыдущим владельцем, удаляются, даже если таковым было это же самое
приложение.
     3. Хотя в буфер обмена может быть записано несколько блоков данных,
передавать их нужно в течение одной операции. Буфер обмена нельзя открыть,
записать в него данные, закрыть, а затем снова открыть и добавить другие
данные, не удалив предыдущий фрагмент.
     4. В буфере обмена одновременно может находиться только по одному
элементу данных каждого типа. Объясняется это той простой причиной, что не
существует способа разделения нескольких элементов данных одного и того
же типа. Однако при наличии данных нескольких типов приложение, полу-
чившее доступ к буферу обмена, может запросить только один элемент, не-
сколько элементов или все элементы. В этом случае данные каждого типа
должны запрашиваться отдельно.
     Буфер обмена может многократно открываться для запроса других элементов
данных или повторного запроса того же элемента. Но в целом, запрашивая фраг-
мент данных из буфера обмена, лучше всего создать его локальную копию, а не
повторять один и тот же запрос снова и снова. Кроме того, не забывайте: нет ника-
кой гарантии того, что при следующем запросе тот же самый элемент данных ос-
танется неизменным, поскольку буфер обмена является общедоступным.



  6.3. Операции со специальными форматами буфера обмена Windows

     В Windows определено несколько «частных» форматов: CF_DSPTEXT,
CF_DSPBITМАР, CF_DSPMETAFILEPICT и CF_DSPENHMETAFILE. Они со-
ответствуют форматам CF_TEXT, CF_BITMAP, CF_METAFILEPICT
и CF_ENHMETAFILE, но имеют одно принципиальное ограничение: прило-
жения, запрашивающие стандартные форматы, не смогут получить доступ к
специальным форматам буфера обмена. В этой связи следует сделать несколь-
ко замечаний:
     – данные, находящиеся в одном из специальных форматов, предназна-
чаются для обмена информацией между двумя экземплярами одного и того же
приложения или между двумя приложениями, специально разработанными для
совместной работы;

                                       85