Буфер обмена (clipboard) в Windows дает возможность передавать данные от одной программы к другой. Это относительно простой механизм, не требующий больших добавлений ни к программе, которая помещает данные в буфер обмена, ни к программе, которая в дальнейшем их получает. В Windows 95 имеется программа просмотра, в которой показывается текущее состояние буфера обмена. В большинстве программ, имеющих дело с документами или другими данными, имеется меню Edit с опциями Cut, Copy и Paste. Если пользователь выбирает опции Cut или Copy, то программа передает данные в буфер обмена. Эти данные находятся в специальном формате, например в виде текста, битового образа или метафайла. Если пользователь выбирает в меню опцию Paste, программа проверяет имеются ли в буфере обмена данные в том формате, который программа может использовать, и если да, то эти данные передаются из буфера обмена в программу.
Программы не должны передавать данные в буфер обмена и получать их оттуда без совершенно точно определенной инструкции пользователя. Например, пользователь, выполняющий в одной программе операцию Cut или Copy, должен быть уверен, что эти данные будут оставаться в буфере обмена вплоть до следующей операции Cut или Copy.
Простое использование буфера обмена
Мы начнем с анализа программы для передачи данных в буфер обмена (Cut и Copy) и получения данных из буфера обмена (Paste).
Стандартные форматы данных буфера обмена
Windows поддерживает стандартные форматы данных буфера обмена, идентификаторы которых находятся в заголовочных файлах Windows. Наиболее часто используемыми из них являются:
q CF_TEXT — оканчивающаяся нулем группа символов из набора символов ASCII, в конце каждой строки которой имеются символы возврата каретки и перевода строки. Это простейший формат данных буфера обмена. Передаваемые в буфер обмена данные хранятся в области оперативной памяти, а передаются они с помощью описателя этой области памяти. Эта область памяти становится неотъемлемой частью буфера обмена, и программа, создавшая этот блок памяти, больше не должна его использовать.
q CF_BITMAP — зависящий от устройства битовый образ. Битовый образ передается в буфер обмена с помощью описателя битового образа. И в этом случае программа, после передачи битового образа в буфер обмена, не должна его больше использовать.
q CF_METAFILEPICT — “картинка метафайла” (metafile picture). Это не совсем то же самое, что метафайл (описанный в главе 4). Скорее это метафайл, содержащий дополнительную информацию в виде небольшой структуры типа METAFILEPICT. Программа передает картинку метафайла в буфер обмена с помощью описателя области памяти, содержащего эту структуру. В структуре METAFILEPICT имеется четыре поля: mm (LONG), режим отображения метафайла; xExt (LONG) и yExt (LONG), ширина и высота образа метафайла;