構造体 - 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 パケットの動的配列は、 IPaper 実装クラスのメンバーである m_paInkData によって指されます。 配列は、最初の割り当てで IPaper::InitPaper メソッド内に作成されます。 詳細については、 PAPER.H の CImpIPaper 実装の InitPaper メソッドとプライベート NextSlot ユーティリティ メソッドを参照してください。 InkStart、InkDraw、InkStop の各メソッドは、NextSlot を使用して配列内の新しいスロットを取得します。 配列は、必要に応じて NextSlot によって動的に拡張されます。
クライアントは IPaper::Erase メソッドを呼び出して、現在の図面を消去します。 このメソッドは配列を再割り当てしません。現在のすべてのインク データをINKTYPE_NONEとしてマークし、配列のデータ終了インデックスを 0 にリセットするだけです。
クライアントは IPaper::Lock メソッドと Unlock メソッドを呼び出して、描画用の 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 インターフェイスによってこの情報が管理されるため、作成日と最終変更日はこれらのペーパー プロパティには含まれません。