Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O COPaper empacota a cor da caneta, a largura e as coordenadas em estruturas de INKDATA e as armazena em uma matriz alocada dinamicamente gerenciada 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, membro da classe de implementação IPaper. A matriz é criada no método IPaper::InitPaper com uma alocação inicial. Para obter detalhes, consulte o método InitPaper e o método de utilitário NextSlot privado da implementação CImpIPaper em PAPER.H. Os métodos InkStart, InkDrawe InkStop usam o 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 de 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 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 de 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 interfaceIPaperé 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 de 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 de plano de fundo.
Embora não seja usado no StoServe/exemplos de 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 interfaceIStorageusada para acessar arquivos compostos gerencia essas informações.