Udostępnij przez


Struktury — StoServe

CoPaper pakuje kolor pióra, szerokość i współrzędnych do INKDATA struktur i przechowuje je w dynamicznie przydzielonej tablicy, którą zarządza w pamięci.

STRUKTURA INKDATA

Poniżej przedstawiono deklaracje struktury INKDATA z 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;

Tablica dynamiczna tych pakietów INKDATA jest wskazywana przez m_paInkData element członkowski klasy implementacji IPaper. Tablica jest tworzona w ramach metody IPaper::InitPaper z początkową alokacją. Aby uzyskać szczegółowe informacje, zobacz metodę InitPaper i prywatną metodę narzędzia NextSlot implementacji CImpIPaper w pliku PAPER.H. Metody InkStart, InkDrawi InkStop używają polecenia NextSlot w celu uzyskania nowych miejsc w tablicy. Tablica jest dynamicznie rozszerzana przez usługę NextSlot w miarę pojawiania się potrzeby.

Klient wywołuje metodę IPaper::Erase, aby wymazać bieżący rysunek. Ta metoda nie przydzieli tablicy; po prostu oznacza wszystkie bieżące dane pisma oddyskowego jako INKTYPE_NONE i resetuje indeks końca danych tablicy do zera.

Klient wywołuje metody IPaper::Lock i Unlock metody zarządzania własnością coPaper do rysowania. Te metody służą do organizowania dostępu między wieloma klientami do rysunku przechowywanego w udostępnionym dokumencie COPaper.

struktura PAPER_PROPERTIES

Klient wywołuje metodę IPaper::Resize, aby poinformować użytkownika, że rozmiar bieżącego prostokąta papieru rysunkowego został zmieniony przez użytkownika. Te dane współrzędnych są przechowywane w strukturze PAPER_PROPERTIES, która jest przechowywana przy użyciu danych pisma odkowego, gdy wszystkie dane papieru są przechowywane w pliku złożonym.

Poniżej znajduje się deklaracja PAPER_PROPERTIES z 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;

Struktura PAPER_PROPERTIES została zaprojektowana tak, aby nowe formaty danych pisma oddychanego można było dodawać w dowolnym momencie w miarę rozwoju składnika DllPaper. Interfejs IPaper jest wystarczająco ogólny, że kolejna wersja składnika DllPaper może przechowywać inny format danych pisma odręcznego podczas implementowania tego samego interfejsu IPaper. Ponieważ metody IPaper nie zależą od określonego formatu danych pisma odręcznego, nowa wersja składnika DllPaper, która obsługuje inny format danych pisma odręcznego, może używać tego samego interfejsu.

Właściwości papieru przechowywane w pliku złożonym rejestrują bieżący rozmiar tablicy danych atramentu. Następnie można przydzielić odpowiedni rozmiar tablicy, aby uwzględnić dane pisma odkowego odczytywane z pliku.

Struktura PAPER_PROPERTIES przechowuje również rozmiar prostokąta rysunku powierzchni papieru i kolor okna tła.

Chociaż nie są używane w StoServe/StoClien przykładów, można również przechowywać tytuł rysunku i nazwę autora.

Daty utworzenia i daty ostatniej modyfikacji nie są uwzględniane w tych właściwościach papieru, ponieważ interfejs IStorage używany do uzyskiwania dostępu do plików złożonych zarządza tymi informacjami.