Структуры — 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 , используемый для доступа к составным файлам, управляет этими сведениями.