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.