бражает их в своем окне.
В целом буферу обмена Windows свойственны следующие недостатки:
– имеется только один буфер;
– все данные, записанные в буфер, являются общедоступными;
– записанные в буфер данные могут быть разрушены.
Поскольку буфер обмена только один, все приложения должны использо-
вать его совместно. Но совместное использование неизбежно связано
с возможностью конфликтов. Предположим, что приложение А записало
в буфер обмена растровое изображение, а затем приложение Б записало
в него блок текстовых данных. Поскольку приложение Б вполне закономерно
начинает с того, что очищает буфер обмена, картинка, записанная приложени-
ем А, удаляется. Если приложение В, для которого была предназначена эта
картинка, уже успело ее прочитать, то все в порядке. Если же приложение В не
скопировало изображение до того, как приложение Б записало в буфер обмена
текст, картинка пропадает.
Общедоступность буфера обмена также может стать причиной возмож-
ных ошибок. Поскольку элемент данных, записанный в буфер, не может быть
адресован какому-либо конкретному приложению, доступ к этой информации
может быть ошибочно получен другим приложением, которое работает с дан-
ными того же типа [2].
Буфер обмена может содержать данные нескольких типов, записанных
одним или несколькими приложениями. В этом случае проблема заключается в
том, как различить эти блоки (например, несколько блоков текста, записанных
из разных источников). По этой причине приложение обычно очищает буфер
обмена перед тем, как записывать в него новый материал.
Эти факторы необходимо учитывать, но они не представляют собой серь-
езной проблемы. Если перечисленные недостатки накладывают дополнитель-
ные ограничения на работу программы, можно воспользоваться технологией
динамического обмена данными (DDE), которая была рассмотрена ранее. Эта
технология позволяет реализовать безопасный канал для обмена информацией.
Windows поддерживает 14 стандартных форматов данных буфера обмена,
определенных в файле WinUser.H следующим образом:
CF_BITMAP CF_OEMTEXT CF_TEXT
CF_DIB CF_PALETTE CF_TIFF
CF_DIF CF_PENDATA CF_UNICODETEXT
CF_ENHMETAFILE CF_RIFF CF_WAVE
CF_METAFILEPICT CF_SYLK
В файле WinUser.H определен также ряд специальных форматов, или фла-
гов формата. Кроме того, каждое приложение может предложить собственный
пользовательский формат данных буфера обмена. Но для большинства целей
вполне достаточно стандартных форматов. Рассмотрим основные виды форма-
тов более подробно.
Текстовые форматы. Простейший формат данных буфера обмена – это
текстовый формат CF_TEXT,
который состоит из набора строк ANSI-
79