Всё сдал! - помощь студентам онлайн Всё сдал! - помощь студентам онлайн

Реальная база готовых
студенческих работ

Узнайте стоимость индивидуальной работы!

Вы нашли то, что искали?

Вы нашли то, что искали?

Да, спасибо!

0%

Нет, пока не нашел

0%

Узнайте стоимость индивидуальной работы

это быстро и бесплатно

Получите скидку

Оформите заказ сейчас и получите скидку 100 руб.!


Буфер обмена

Тип Реферат
Предмет Информатика и программирование
Просмотров
477
Размер файла
29 б
Поделиться

Ознакомительный фрагмент работы:

Буфер обмена

БУФЕР ОБМЕНА


Введение

Одна из задач программиста Windows-приложений состоит в создании продуктов, которые настолько подобны другим программам Windows, что пользователь сможет легко переключаться между ними, не ощущая различий в их поведении и внешнем виде. В идеале пользователь должен воспринимать однородную среду и не замечать разграничений между программами. В такой среде сама собой напрашивается возможность переноса данных между приложениями.

Буфер обмена (clipboard) Windows обеспечивает простой обмен данными между приложениями.

Содержимое буфера обмена в любой момент времени представляет собой набор объектов в памяти, созданных программой, которая поместила данные в буфер обмена. Функции API и сообщения, реализующие буфер обмена, управляют его содержимым. Буфер обмена служит единственным протоколом доступа к хранимым данным.


1. Форматы буфера обмена

Приложения могут обрабатывать одни и те же данные по-разному. Например, текст может представлять собой простые символы, сгенерированные эмулятором терминала, либо результат применения современного полнофункционального текстового процессора. Данные, импортируемые любой программой из буфера обмена, необходимо представлять в наилучшем из возможных форматов. С этой целью приложения, попадающие данные в буфер обмена, экспортируют их как можно большим числом способов.

В результате при считывании из буфера обмена клиенту предоставляется набор опций. Различные способы представления данных в буфере обмена называются форматами буфера обмена.

Когда приложение использует функцию SetClipboardData() для помещения данных в буфер обмена в определенном формате, принято говорить, что приложение воспроизводит этот формат. Вообще говоря, чем больше форматов буфера обмена поддерживается приложением, тем точнее оно осуществляется обмен данными с другими Windows-приложениями. Поэтому имеет смысл воспроизводить как можно большее число форматов буфера обмена.

Приложение, которое очищает буфер обмена через функцию EmptyClipboard(), а затем помещает в него данные любого формата с использованием функции SetClipboardData(), называется владельцем буфера обмена (clipboardowner). (Термин не совсем точен, поскольку после помещения данных в буфер обмена они более не принадлежат владельцу. Эти данные принадлежат среде Windows.)

Другие приложения, извлекающие данные, называются клиентами буфера обмена (clipboardreaders). Извлечение данных из буфера обмена не делает клиента его владельцем.

Программа Windows, единственной целью которой является просмотр содержимого буфера обмена, называется окном просмотра буфера обмена (clipboardviewer).

Для каждого формата буфера обмена, поддерживаемого приложением, должен выполняться отдельный вызов функции SetClipboardData(). Данные, записываемые в буфер обмена в результате каждого вызова, только замещают данные, хранимые в буфере обмена для данного формата. По этой причине перед помещением новых данных в буфер обмена, программа должна вызвать функцию EmptyClipboard(), чтобы очистить все хранимые форматы от неподходящих данных. В противном случае эти данные могу быть ошибочно сохранены. Вызов функции EmptyClipboard() также позволяет старому владельцу буфера обмена очистить все области памяти, выделенные определенным форматам, путем обработки сообщения WM_DESTROYCLIPBOARD.


На рис.1 показано взаимодействие между владельцем и клиентом буфера обмена. Обратите внимание, что клиент выбрал просмотр данных в формате CF_TEXT, хотя владелец воспроизводит не менее трех текстовых форматов, включая GF_TEXT, CF_OEMTEXT и CF_UNICODETEXT.

Клиент буфера обмена может поддерживать и другие форматы, но для вставки данных ему более всего подходит формат CF_TEXT.

В табл.1 перечислены некоторые предопределенные форматы и описаны данные, а также тип дескриптора, передаваемого функции SetClipBoardData() для каждого типа. Наиболее распространенным типом записей буфера обмена является глобальный блок памяти, выделенный с опцией GMEM_DDESHARE. Для него в таблице применяется простое обозначение HANDLE. Постоянные значения форматов буфера обмена описаны в файле заголовков winuser.h вместе с прототипами функций API, которые определяют интерфейс буфера обмена.

Таблица 1

Предопределенные форматы буфера обмена

Формат буфера обменаТип дескриптораОписание данных
CF_BITMAPHBITMAPДанные представляют собой набор битов.
CF_DSPENHMETAFILE HENHMETAFILE Расширенный метафайл, приватный для приложения.
CF_DSPMETAFILEPICTHANDLEОбъект памяти, содержащий структуру METAFILEPICT, которая является приватной для приложения.
CF_DSPTEXTHANDLEПриватный для приложения текст.
CF_DSPBITMAPНВIТМАРРастровое изображение, которое является приватным для приложения. Этот формат может использоваться, например, для передачи данных между различными экземплярами одного и того же приложения. Для определения владельца буфера обмена следует использовать функцию GetClipboardOwner().
CF_ENHMETAFILEHENHMETAFILE Расширенный метафайл.
CF_GDIOBJFIRSTHGDIOBJОписанные приложением форматы сквозного буфера обмена (throughclipboard), представленные объектами GDI (GraphicDeviceInterface — интерфейсом графических устройств). При вызове функции EmptyClipboard() для уничтожения данных этого формата используется функция DeleteObject().
CF_METFILEPICT HANDLEОбъект памяти, содержащий структуру METAFILEPICT.
CF_OEMTEXTHANDLEОбъект памяти, который содержит завершаемую нулем строку символов набора OEM. Строки разделяются последовательностью символов возврата каретки и перевода строки (CR/LF).
CF_OWNERDISPLAYNULLУказывает, что владелец буфера обмена будет отвечать за отображение данных, а также обновляет окна просмотре буфер обмена. Окно просмотра буфера обмена отправляет владельцу сообщения WM_ASKCBFORMATNAME, WM_PAINTCLIPBOARD, WM_HSCROLLCLIPBOARD, WM_SIZECLIPBOARD и WM_VSCROLLCLIPBOARD.
от CF_PRIVATEFIRST до CF_PRIVATELASTЭтот диапазон обозначает приватные форматы буфера обмена. Windows не управляет этими форматами. Владелец буфера обмена должен управлять ресурсам» через сообщение WM_DESTROYCLBOARD.
CF_RBIFF HANDLEСложная поддержка звуковых данных. Превосходит по сложности поддержку CF_WAVE.
CF_TEXTHANDLEОбъект памяти, содержащий строку символов, завершаемую нулем. Строки разграничиваются последовательностью символов возврата каретки и перевода строки (CR/LF).
CF_TIFFHANDLEФормат дескриптора файла изображения.
CF_UNCODETEXTHANDLEОбъект памяти, содержащий завершаемую нулем строку в формате многобайтного глобального кода символов Unicode.
CF_WAVEHANDLEСтандартная поддержка Wave-файлов.

2. Управление данными буфера обмена в среде Windows

Система Windows управляет содержимым и форматами буфера обмена. Windows сохраняет данные для каждого формата отдельно таким образом, что помещение данных в один формат не затрагивает данные, записанные в другом формате. Кроме того Windows управляет удалением данных, помещенных в буфер обмена. Данные, хранимые в буфере обмена для данного формата, должны удаляться при сохранении в формате новых данных, а также при вызове функции EmptyClipboard() для очистки всего содержимого буфера обмена.

Windows удаляет элементы данных буфера обмена путем вызова специальной функции удаления. Выбор функции зависит от типа данных, хранимых в формате буфера обмена.

Например, для объектов GDIWindows использует функцию DeleteObject(), для объектов памяти применяется функция GlobalFree() и т.д.

Исключением из этих правил служат приватные форматы буфера обмена. Как будет показано, Windows не управляет данными, хранимыми в упомянутых форматах буфера обмена. Фактически, управлять .хранимыми в приватных форматах данными должны программы, которые эти форматы создают.

3. Воспроизведение данных буфера обмена с задержкой

Обработка большого количества форматов данных буфера обмена сопряжена с затратами времени, в особенности, если приложение поддерживает графические форматы, такие как bitmap-изображения или метафайлы. Управление GDI-объектами требует больших затрат времени и памяти. Не имеет смысла обрабатывать или хранить данные, если их формат вообще не используется.

К счастью, API-интерфейсы Win32 предоставляют простой метод задержки помещения данных в буфер обмена, пока не будет сгенерирован запрос на извлечение данных в определенном формате. Это называется воспроизведением с задержкой (delayedrendering). Для его задействования достаточно передать значение NULL в качестве дескриптора типа HANDLEна данные буфера обмена при установке данных с помощью функции SetClipboardData(). Если приложение требует воспроизведения формата, отправляется сообщение WM_RENDERFORMATс переменной wParam, чтобы указать запрашиваемый формат.

Воспроизведение с задержкой экономит время и ресурсы. Единственный недостаток подобного подхода заключается в том, что система может не отвечать немедленно после запроса пользователя на вставку, поскольку некоторое время затрачивается на форматирование данных.

Тем не менее, обычно воспроизведение с задержкой считается наилучшим подходом в случае поддержки большого количества форматов, либо та отсутствии времени на помещение данных в буфер обмена. Помните, часто бывает, что данные вырезаются или копируются, но не вставляются.

Примером воспроизведения с задержкой служат функции ClipboardFormatAvailable() и GetPriorityClipboardFormat().

Формат CF_OWNERDISPLAY

Уникальный формат буфера обмена CF_OWNERDISPLAYвозлагает функции отображения данных буфера обмена на его владельца. Владелец буфера обмене принимает набор сообщений, описывающих изменения клиентской области в окне просмотра буфера обмена. Эти сообщения сведены в табл.2.

Одним из наглядных примеров формата CF_OWNERDISPLAYслужит утилита Clipbook — окно просмотра буфера обмена Windows, которое распознает, казалось бы неограниченное количество форматов. На самом деле Clipbook предоставляет свою клиентскую область владельцу данных буфера обмена, который, конечно же, способен отображать содержимое так же, как и в исходном документе. Единственное отличие для владельца буфера обмена составляет окно, где должны выводиться данные. Однако это не вносит изменений в логику программы.

Таблица 2

Сообщения, принимаемые владельцем буфера обмена для отображения данных

СообщениеЗначение
WM_ASKCBFORMATNAMEОтправляется, когда окно просмотра буфера обмена запрашивает имя формата. Владелец буфера обмена должен скопировать байты wParamв буфер, на который указывает параметр lPrarm.
WM_PAINTCLIPBOARDОтправляется, когда клиентская область окна буфера обмена требует обновления. Параметр wParamявляется дескриптором окна просмотра буфера обмена. Параметр lParamявляется указателем на PAINTSTRUCT.
WM_SIZECLIPBOARDОтправляется при изменении размера клиентской области окна просмотра буфера обмена. Параметр wParamявляется дескриптором окна просмотра буфера обмена. Параметр lParam- указатель на структуру RECT.
WM_HSCROLLCLIPBOARD иWM_VSCROLLCLIPBOARDОтправляется при прокрутке клиентской области окна просмотра буфера обмена. Параметр wParamявляется дескриптором окна просмотра буфера обмена. Младшее слово параметра lParamобозначает тип запроса полосы прокрутки (подобно параметру wParam в сообщении WM_HSCROLL или WM_VSCROLL). Старшее слово параметра lParamуказывает позицию бегунка тогда и только тогда, когда полоса прокрутки запрашивает SB_THUMBPOSITION.

Формат буфера обмена CF_OWNERDISPLAYобеспечивает наивысшую степень разнообразия всех форматов поскольку за их отображение отвечает источник данных. Если приложение поддерживает необычный формат буфера обмена (например, приватный или зарегистрированный), существует только две возможности отображения данных вне приложения:

- отображение владельцем;

- написание окна просмотра буфера обмена.

4. Окна просмотра буфера обмена

Окно просмотра буфера обмена представляет собой программу, предназначенную для просмотра содержимого буфера обмена. Обычно окна просмотра поддерживают множество форматов, но не могут правильно интерпретировать приватные зарегистрированные форматы. В этой связи может потребоваться создать окно просмотра буфера обмена самостоятельно.

Следует учитывать, что окно просмотра буфера обмена не владеет данными, которыми управляет. Требования к окну просмотра:

1. Окно просмотра ни в коем случае не должно выполнять запись в содержимое буфера обмена.

2. Окно просмотра никогда не должно оставлять какой-либо элемент содержимого буфера обмена заблокированным.

3. Поскольку в любой момент времени могут выполняться несколько окон просмотра и сообщения передаются между ними посредством связанного списка окон просмотра, создаваемая программа должна отвечать следующим соглашениям:

- Сохранять значение возврата функции SetClipboardViewer(), которое указывает на следующее окно просмотра буфера обмена в цепочке. Windows помещает новые окно просмотра перед уже установленными.

- Передавать сообщения WM_DRAWCLIPBOARD следующему окну просмотра в цепочке. В противном случае остальные окна просмотра не будут обновляться.

- Передавать сообщения WM_CHANGECBCHAINследующему окну просмотра в цепочке. В противном случае цепочка окон просмотра будет прервана.

- Отслеживать сообщения WM_CHANGECBCHAINдля удаления следующего окна цепочки. Параметр IParamсодержит новый дескриптор следующего окна в случае удаления следующего, окна просмотра.

- Для удаления окна просмотра из цепочки следует вызвать функцию ChangeClipboardChain() с использованием сохраненного значения следующего окна.


Нет нужной работы в каталоге?

Сделайте индивидуальный заказ на нашем сервисе. Там эксперты помогают с учебой без посредников Разместите задание – сайт бесплатно отправит его исполнителя, и они предложат цены.

Цены ниже, чем в агентствах и у конкурентов

Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит

Бесплатные доработки и консультации

Исполнитель внесет нужные правки в работу по вашему требованию без доплат. Корректировки в максимально короткие сроки

Гарантируем возврат

Если работа вас не устроит – мы вернем 100% суммы заказа

Техподдержка 7 дней в неделю

Наши менеджеры всегда на связи и оперативно решат любую проблему

Строгий отбор экспертов

К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»

1 000 +
Новых работ ежедневно
computer

Требуются доработки?
Они включены в стоимость работы

Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован

avatar
Математика
История
Экономика
icon
159599
рейтинг
icon
3275
работ сдано
icon
1404
отзывов
avatar
Математика
Физика
История
icon
156450
рейтинг
icon
6068
работ сдано
icon
2737
отзывов
avatar
Химия
Экономика
Биология
icon
105734
рейтинг
icon
2110
работ сдано
icon
1318
отзывов
avatar
Высшая математика
Информатика
Геодезия
icon
62710
рейтинг
icon
1046
работ сдано
icon
598
отзывов
Отзывы студентов о нашей работе
63 457 оценок star star star star star
среднее 4.9 из 5
Филиал государственного бюджетного образовательного учреждения высшего образования Московской област
Спасибо Елизавете за оперативность. Так как это было важно для нас! Замечаний особых не бы...
star star star star star
РУТ
Огромное спасибо за уважительное отношение к заказчикам, быстроту и качество работы
star star star star star
ТГПУ
спасибо за помощь, работа сделана в срок и без замечаний, в полном объеме!
star star star star star

Последние размещённые задания

Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн

решить 6 практических

Решение задач, Спортивные сооружения

Срок сдачи к 17 дек.

только что

Задание в microsoft project

Лабораторная, Программирование

Срок сдачи к 14 дек.

только что

Решить две задачи №13 и №23

Решение задач, Теоретические основы электротехники

Срок сдачи к 15 дек.

только что

Решить 4задачи

Решение задач, Прикладная механика

Срок сдачи к 31 дек.

только что

Выполнить 2 задачи

Контрольная, Конституционное право

Срок сдачи к 12 дек.

2 минуты назад

6 заданий

Контрольная, Ветеринарная вирусология и иммунология

Срок сдачи к 6 дек.

4 минуты назад

Требуется разобрать ст. 135 Налогового кодекса по составу напогового...

Решение задач, Налоговое право

Срок сдачи к 5 дек.

4 минуты назад

ТЭД, теории кислот и оснований

Решение задач, Химия

Срок сдачи к 5 дек.

5 минут назад

Решить задание в эксель

Решение задач, Эконометрика

Срок сдачи к 6 дек.

5 минут назад

Нужно проходить тесты на сайте

Тест дистанционно, Детская психология

Срок сдачи к 31 янв.

6 минут назад

Решить 7 лабораторных

Решение задач, визуализация данных в экономике

Срок сдачи к 6 дек.

7 минут назад

Вариационные ряды

Другое, Статистика

Срок сдачи к 9 дек.

8 минут назад

Школьный кабинет химии и его роль в химико-образовательном процессе

Курсовая, Методика преподавания химии

Срок сдачи к 26 дек.

8 минут назад

Вариант 9

Решение задач, Теоретическая механика

Срок сдачи к 7 дек.

8 минут назад

9 задач по тех меху ,к 16:20

Решение задач, Техническая механика

Срок сдачи к 5 дек.

9 минут назад
9 минут назад
10 минут назад
planes planes
Закажи индивидуальную работу за 1 минуту!

Размещенные на сайт контрольные, курсовые и иные категории работ (далее — Работы) и их содержимое предназначены исключительно для ознакомления, без целей коммерческого использования. Все права в отношении Работ и их содержимого принадлежат их законным правообладателям. Любое их использование возможно лишь с согласия законных правообладателей. Администрация сайта не несет ответственности за возможный вред и/или убытки, возникшие в связи с использованием Работ и их содержимого.

«Всё сдал!» — безопасный онлайн-сервис с проверенными экспертами

Используя «Свежую базу РГСР», вы принимаете пользовательское соглашение
и политику обработки персональных данных
Сайт работает по московскому времени:

Вход
Регистрация или
Не нашли, что искали?

Заполните форму и узнайте цену на индивидуальную работу!

Файлы (при наличии)

    это быстро и бесплатно