Freigeben über


Strukturen - StoServe

COPaper verpackt die Stiftfarbe, Breite und Koordinaten in INKDATA- Strukturen und speichert sie in einem dynamisch zugeordneten Array, das sie im Arbeitsspeicher verwaltet.

INKDATA-Struktur

Im Folgenden sind die Deklarationen für die INKDATA Struktur von PAPER.H aufgeführt.

// 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;

Das dynamische Array dieser INKDATA--Pakete wird durch m_paInkData, ein Mitglied der IPaper Implementierungsklasse, verwiesen. Das Array wird innerhalb der IPaper::InitPaper Methode mit einer anfänglichen Zuordnung erstellt. Ausführliche Informationen finden Sie in der InitPaper--Methode und der privaten NextSlot-Hilfsmethode der CImpIPaper-Implementierung in PAPER.H. Die InkStart-, InkDraw-und InkStop- Methoden verwenden NextSlot, um neue Steckplätze im Array abzurufen. Das Array wird dynamisch von NextSlot erweitert, da die Notwendigkeit entsteht.

Der Client ruft die IPaper::Erase-Methode auf, um die aktuelle Zeichnung zu löschen. Mit dieser Methode wird das Array nicht neu lociert; es markiert einfach alle aktuellen Freihanddaten als INKTYPE_NONE und setzt den End-of-Data-Index des Arrays auf Null zurück.

Der Client ruft die IPaper::Lock auf und Unlock Methoden zum Verwalten des Besitzes von COPaper für die Zeichnung. Diese Methoden werden bereitgestellt, um den Zugriff zwischen mehreren Clients auf die Zeichnung in einem freigegebenen COPaper zu organisieren.

PAPER_PROPERTIES Struktur

Der Client ruft die IPaper::Resize-Methode auf, um COPaper mitzuteilen, dass der Benutzer die Größe des aktuellen Zeichenpapierrechtecks geändert hat. Diese Koordinatendaten werden in einer PAPER_PROPERTIES Struktur gespeichert, die mit den Freihanddaten gespeichert wird, wenn alle Papierdaten in einer Verbunddatei gespeichert werden.

Es folgt die PAPER_PROPERTIES Deklaration von 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;

Die PAPER_PROPERTIES-Struktur ist so konzipiert, dass neue Freihanddatenformate jederzeit hinzugefügt werden können, während sich die DllPaper-Komponente weiterentwickelt. Die IPaper Schnittstelle ist allgemein genug, damit eine nachfolgende Version der DllPaper-Komponente ein anderes Freihanddatenformat speichern kann, während die gleiche IPaper--Schnittstelle implementiert wird. Da die Methoden von IPaper nicht von einem bestimmten Freihanddatenformat abhängen, kann eine neue Version der DllPaper-Komponente, die ein anderes Freihanddatenformat unterstützt, dieselbe Schnittstelle verwenden.

Die in einer Verbunddatei gespeicherten Papiereigenschaften zeichnen die aktuelle Größe des Freihanddatenarrays auf. Die richtige Arraygröße kann dann zugewiesen werden, um die Freihanddaten aufzunehmen, die aus der Datei gelesen werden.

Die PAPER_PROPERTIES Struktur speichert auch die Zeichnungsrechteckgröße und die Hintergrundfensterfarbe der Papieroberfläche.

Obwohl in den StoServe/StoClien Beispielen nicht verwendet wird, kann auch ein Zeichnungstitel und ein Autorname gespeichert werden.

Erstellungsdatum und Datum der letzten Änderung sind in diesen Papiereigenschaften nicht enthalten, da die IStorage Schnittstelle, die für den Zugriff auf Verbunddateien verwendet wird, diese Informationen verwaltet.