Методы 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, все они могли бы отобразить один и тот же документ, подключився к этой точке подключения.