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


Структуры — StoServe

COPaper упаковывает цвет пера, ширину и координаты в структуры INKDATA и сохраняет их в динамически выделенном массиве, которым он управляет в памяти.

Структура INKDATA

Ниже приведены объявления для структуры INKDATA из PAPER.H.

// The types of Ink Data.
#define INKTYPE_NONE  0
#define INKTYPE_START 1
#define INKTYPE_DRAW  2
#define INKTYPE_STOP  3

  // The Ink Data structure.
  typedef struct _INKDATA
  {
    SHORT nType;            // Ink Type.
    SHORT nX;               // X-coordinate of ink point.
    SHORT nY;               // Y-coordinate of ink point.
    SHORT nWidth;           // Ink line width in pixels.
    COLORREF crColor;       // Ink color.
  } INKDATA;

На динамический массив этих пакетов INKDATA указывает m_paInkData, член класса реализации IPaper . Массив создается в методе IPaper::InitPaper с начальным выделением. Дополнительные сведения см. в разделе Метод InitPaper и частный служебный метод NextSlot реализации CImpIPaper в PAPER.H. Методы InkStart, InkDraw и InkStop используют NextSlot для получения новых слотов в массиве. По мере необходимости массив динамически расширяется nextSlot.

Клиент вызывает метод IPaper::Erase для удаления текущего документа. Этот метод не перераспределять массив; он просто помечает все текущие данные рукописного ввода как INKTYPE_NONE и сбрасывает индекс конца данных массива до нуля.

Клиент вызывает методы IPaper::Lock и Unlock для управления владением COPaper для рисования. Эти методы предоставляются для организации доступа нескольких клиентов к документу, хранямуся в общем coPaper.

Структура PAPER_PROPERTIES

Клиент вызывает метод IPaper::Resize , чтобы сообщить COPaper, что пользователь изменяет размер прямоугольника текущей бумаги для рисования. Эти данные координат хранятся в структуре PAPER_PROPERTIES , которая хранится вместе с данными рукописного ввода, когда все бумажные данные хранятся в составном файле.

Ниже приведено объявление PAPER_PROPERTIES из PAPER.H.

#define PAPER_TITLE_SIZE 64
  typedef struct _PAPER_PROPERTIES
  {
    LONG lInkDataVersion;
    LONG lInkArraySize;
    COLORREF crWinColor;
    RECT WinRect;
    WCHAR wszTitle[PAPER_TITLE_SIZE];
    WCHAR wszAuthor[PAPER_TITLE_SIZE];
    WCHAR wszReserved1[PAPER_TITLE_SIZE];
    WCHAR wszReserved2[PAPER_TITLE_SIZE];
  } PAPER_PROPERTIES;

Структура PAPER_PROPERTIES разработана таким образом, чтобы новые форматы данных рукописного ввода можно было добавлять в любое время по мере развития компонента DllPaper. Интерфейс IPaper достаточно общий, что в последующей версии компонента DllPaper может храниться другой формат данных рукописного ввода при реализации того же интерфейса IPaper . Так как методы IPaper не зависят от конкретного формата данных рукописного ввода, новая версия компонента DllPaper, поддерживающая другой формат данных рукописного ввода, может использовать тот же интерфейс.

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

В структуре PAPER_PROPERTIES также хранится размер прямоугольника и цвет окна фона поверхности бумаги.

Хотя и не используется в примерах StoServe/StoClien , можно также сохранить заголовок рисунка и имя автора.

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