Поделиться через


Методы IPaperSink

COPaper предоставляет интерфейс IConnectionPointContainer , чтобы клиенты могли подключаться к COPaper, чтобы получать уведомления об указанных событиях, происходящих в COPaper. Предоставляя этот интерфейс, COPaper становится подключаемым объектом. Клиент может вызвать QueryInterface для этого интерфейса и использовать его для получения точек подключения объекта. Участие клиента в этой схеме рассматривается в связанном примере StoClien .

По сути, клиент реализует так называемый приемник в виде объекта приемника с интерфейсом приемника. Интерфейс приемника получает исходящие вызовы уведомлений о событиях от COPaper после правильного подключения приемника клиентом к экземпляру COPaper. Клиент устанавливает подключение с помощью объекта точки подключения, управляемого COPaper. В одном подключаемом COM-объекте может быть множество точек подключения. В примере StoServe COPaper имеет только одну точку подключения, которая обрабатывает события бумаги для рисования.

Любое количество клиентов может подключаться к одной точке подключения. Точка подключения CONNPOINT_PAPERSINK в COPaper поддерживает группу подключений, которые могут динамически увеличиваться во время выполнения. Полная информация о поддержке подключаемых объектов COPaper закодирована в файлах CONNECT. H и CONNECT. CPP и не будут рассматриваться здесь. Конструкция очень похожа на то, что было изучено в примере кода CONSERVE.

Клиент StoClien реализует соответствующие объекты приемников для точек подключения, которые он ожидает найти в COPaper. В контексте COPaper важный объект приемника, который реализует StoClien , предоставляет интерфейс IPaperSink . Это исходящий интерфейс, используемый COPaper для уведомления StoClien о различных событиях в COPaper.

Ниже приведена сводка методов в IPaperSink из IPAPER. H в одноуровневом каталоге \INC.

Метод Описание
Заблокировано Клиент взял под контроль и заблокировал бумагу.
Открыт Клиент отканулся от контроля над бумагой.
Загружен Клиент загрузил содержимое бумаги из собственного составного файла.
Сохранено Клиент сохранил содержимое бумаги в собственный составной файл.
InkStart Клиент запустил последовательность рисования цветных рукописных фрагментов на бумаге.
InkDraw Клиент помещает точки данных рукописного ввода на поверхность бумаги.
InkStop Клиент остановил последовательность рукописного рисования на бумаге.
Стерты Клиент стер все данные рукописного ввода с бумаги.
Изменить Клиент изменил размер бумаги.

 

Эти методы в значительной степени понятны. Хотя приемник должен реализовать все эти методы в некоторой мере, многие из них реализованы как заглушки и не используются в примерах StoServe/StoClien .

Важным методом, используемым в этих примерах, является метод Loaded. Когда клиент сообщает COPaper о загрузке нового документа из файла, ему требуется способ уведомить клиента о загрузке новых данных. Для этого COPaper вызывает IPaperSink::Loaded в приемнике клиента. Затем клиент может вызвать IPaper::Redraw , чтобы запросить, чтобы COPaper воспроизводил новые данные клиенту. Перерисовка приводит к перерисовке загруженного рисунка на дисплее клиента. После завершения загрузки вновь загруженный документ автоматически отображается в окне, предоставленном клиентом.

Полные сведения о подключении этого метода IPaper к IPaperSink см. в разделе IPaper::Redraw.

Методы IPaperSinkInkStart, InkDraw и InkStop используются для отправки отдельных пакетов данных рукописного ввода обратно клиенту. На приеме, клиент рисует их в своем дисплее так же, как когда он первоначально послал их в COPaper. Приведенная выше логика является достаточно общей для нескольких клиентов, которые прослушивают одну и ту же CONNPOINT_PAPERSINK точке подключения. Если эти клиенты совместно используют общий экземпляр COPaper, все они могли бы отобразить один и тот же документ, подключився к этой точке подключения.