Métodos IPaperSink
O COPaper expõe a interface IConnectionPointContainer para que os clientes possam se conectar ao COPaper para receber notificações de eventos especificados que ocorrem no COPaper. Ao expor essa interface, o COPaper se torna um objeto conectável. Um cliente pode chamar QueryInterface para essa interface e usá-la para obter os pontos de conexão do objeto. A participação do cliente nesse esquema é abordada na amostra StoClien associada.
Basicamente, o cliente implementa o que é chamado de coletor na forma de um objeto de coletor com uma interface de coletor. A interface do coletor recebe chamadas de notificação de eventos de saída do COPaper depois que o coletor é conectado corretamente pelo cliente a uma instância de COPaper. O cliente faz a conexão usando um objeto de ponto de conexão gerenciado pelo COPaper. Pode haver vários pontos de conexão em um único objeto COM conectável. No exemplo StoServe , o COPaper tem apenas um ponto de conexão, que manipula eventos de papel de desenho.
Qualquer número de clientes pode se conectar a um único ponto de conexão. O ponto de conexão CONNPOINT_PAPERSINK no COPaper mantém um grupo de conexões que podem crescer dinamicamente em tempo de execução. Os detalhes completos sobre o suporte a objetos conectáveis do COPaper são codificados em arquivos CONNECT. H e CONNECT. CPP e não serão abordados aqui. A construção é muito semelhante ao que foi estudado no exemplo de código CONSERVE.
O cliente StoClien implementa objetos de coletor apropriados para os pontos de conexão que espera encontrar no COPaper. No contexto do COPaper, o importante objeto de coletor que StoClien implementa expõe a interface IPaperSink . Essa é a interface de saída usada pelo COPaper para notificar o StoClien de vários eventos no COPaper.
Aqui está um resumo dos métodos no IPaperSink do IPAPER. H no diretório irmão \INC.
Método | Descrição |
---|---|
Bloqueado | Um cliente assumiu o controle e bloqueou o papel. |
Desbloqueado | Um cliente abriu mão do controle do papel. |
Carregado | Um cliente carregou o conteúdo de papel de seu próprio arquivo composto. |
Salvo | Um cliente salvou o conteúdo de papel em seu próprio arquivo composto. |
InkStart | Um cliente iniciou uma sequência de desenho de tinta colorida para o papel. |
InkDraw | Um cliente está colocando pontos de dados de tinta na superfície do papel. |
InkStop | Um cliente interrompeu sua sequência de desenho de tinta para o papel. |
Apagado | Um cliente apagou todos os dados de tinta do papel. |
Redimensionado | Um cliente redimensionou o papel. |
Esses métodos são em grande parte autoexplicativos. Embora o coletor precise implementar todos esses métodos de alguma forma, muitos são implementados como stubs e não são usados nas amostras StoServe/StoClien .
Um método importante usado nesses exemplos é o método Loaded. Quando o COPaper é informado pelo cliente para carregar um novo desenho do arquivo, ele precisa de uma maneira de notificar o cliente quando os novos dados são carregados. Para fazer isso, o COPaper chama IPaperSink::Loaded no coletor do cliente. Em seguida, o cliente pode chamar IPaper::Redraw para solicitar que o COPaper reproduza os novos dados para o cliente. Redraw faz com que o desenho carregado na exibição do cliente seja repintado. Quando a carga é concluída, o desenho recém-carregado é exibido automaticamente na janela fornecida pelo cliente.
Consulte IPaper::Redraw para obter informações completas sobre a conectividade desse método IPaper com IPaperSink.
Os métodos IPaperSinkInkStart, InkDraw e InkStop são usados para enviar pacotes de dados de tinta individuais de volta ao cliente. Na recepção, o cliente os pinta em sua exibição da mesma maneira que quando originalmente os enviava ao COPaper. A lógica acima é geral o suficiente para permitir vários clientes que estão todos escutando no mesmo ponto de conexão CONNPOINT_PAPERSINK. Se uma instância copaper comum foi compartilhada por esses clientes, todos eles poderiam exibir o mesmo desenho conectando-se a esse ponto de conexão.