Compartilhar via


Estruturas – StoServe

O COPaper empacota a cor, a largura e as coordenadas da caneta em estruturas INKDATA e as armazena em uma matriz alocada dinamicamente que gerencia na memória.

Estrutura INKDATA

Veja a seguir as declarações para a estrutura INKDATA de 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;

A matriz dinâmica desses pacotes INKDATA é apontada por m_paInkData, um membro da classe de implementação IPaper . A matriz é criada dentro do método IPaper::InitPaper com uma alocação inicial. Para obter detalhes, consulte o método InitPaper e o método utilitário NextSlot privado da implementação de CImpIPaper em PAPER.H. Os métodos InkStart, InkDraw e InkStop usam NextSlot para obter novos slots na matriz. A matriz é expandida dinamicamente pelo NextSlot conforme a necessidade surge.

O cliente chama o método IPaper::Erase para apagar o desenho atual. Esse método não realoca a matriz; ele simplesmente marca todos os dados de tinta atuais como INKTYPE_NONE e redefine o índice de fim de dados da matriz como zero.

O cliente chama os métodos IPaper::Lock e Unlock para gerenciar a propriedade do COPaper para desenho. Esses métodos são fornecidos para organizar o acesso entre vários clientes ao desenho mantido em um COPaper compartilhado.

Estrutura PAPER_PROPERTIES

O cliente chama o método IPaper::Resize para informar ao COPaper que o usuário redimensionou o retângulo de papel de desenho atual. Esses dados de coordenadas são mantidos em uma estrutura PAPER_PROPERTIES , que é armazenada com os dados de tinta quando todos os dados de papel são armazenados em um arquivo composto.

Veja a seguir a declaração de PAPER_PROPERTIES de 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;

A estrutura PAPER_PROPERTIES foi projetada para que novos formatos de dados de tinta possam ser adicionados a qualquer momento à medida que o componente DllPaper evolui. A interface IPaper é geral o suficiente para que uma versão subsequente do componente DllPaper possa armazenar um formato de dados de tinta diferente ao implementar a mesma interface IPaper . Como os métodos de IPaper não dependem de um formato de dados de tinta específico, uma nova versão do componente DllPaper que dá suporte a um formato de dados de tinta diferente pode usar essa mesma interface.

As propriedades de papel armazenadas em um arquivo composto registram o tamanho atual da matriz de dados de tinta. O tamanho adequado da matriz pode ser alocado para acomodar os dados de tinta lidos do arquivo.

A estrutura PAPER_PROPERTIES também armazena o tamanho do retângulo de desenho da superfície de papel e a cor da janela da tela de fundo.

Embora não seja usado nos exemplos do StoServe/StoClien , um título de desenho e um nome de autor também podem ser armazenados.

A data de criação e as datas da última modificação não estão incluídas nessas propriedades de papel, pois a interface IStorage usada para acessar arquivos compostos gerencia essas informações.