结构 - StoServe

COPaper 将笔颜色、宽度和坐标打包到 INKDATA 结构中,并将其存储在内存中管理的动态分配数组中。

INKDATA 结构

以下是 PAPER.H 中 INKDATA 结构的声明。

// 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 方法中创建的。 有关详细信息,请参阅 PAPER.H 中 CImpIPaper 实现的 InitPaper 方法和专用 NextSlot 实用工具方法。 InkStartInkDraw,以及 InkStop 方法使用 NextSlot 获取数组中的新槽。 由于需要,数组由 NextSlot 动态扩展。

客户端调用 IPaper::Erase 方法来擦除当前绘图。 此方法不重新分配数组;它只是将所有当前墨迹数据标记为INKTYPE_NONE并将数组的数据结束索引重置为零。

客户端调用 IPaper::Lock,并 解锁 方法来管理 COPaper 的所有权进行绘制。 这些方法用于组织多个客户端对共享 COPaper 中保存的绘图的访问。

PAPER_PROPERTIES结构

客户端调用 IPaper::Resize 方法,告知 COPaper 用户调整当前绘图纸张矩形的大小。 此坐标数据保存在 PAPER_PROPERTIES 结构中,当所有纸张数据存储在复合文件中时,该结构随墨迹数据一起存储。

以下是 PAPER.H 的 PAPER_PROPERTIES 声明。

#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 管理此信息。