plug-ins Dynamic-Renderer
Um plug-in de renderizador dinâmico é um objeto que exibe os dados da caneta tablet em tempo real, pois eles estão sendo manipulados pelo objeto RealTimeStylus . Posteriormente, para eventos como uma atualização de formulário, o plug-in de renderizador dinâmico ou um plug-in coletor de tinta pode redesenhar a tinta.
O objeto DynamicRenderer
O objeto RealTimeStylus implementa a interface IStylusSyncPlugin . O objeto DynamicRenderer renderiza a tinta em tempo real, pois ela está sendo desenhada. Quando o método Refresh é chamado enquanto o objeto DynamicRenderer está habilitado, o objeto DynamicRenderer redesenha o traço que está sendo coletado no momento. A propriedade Enabled do objeto DynamicRenderer é inicialmente definida como FALSE.
Observação
Ao chamar o método Refresh do objeto DynamicRenderer de dentro de um manipulador de eventos Paint no código gerenciado, defina a propriedade ClipRectangle do objeto DynamicRenderer como a propriedade ClipRectangle do objeto PaintEventArgs.
O objeto DynamicRenderer pode armazenar temporariamente em cache dados de tinta. Para usar esse recurso no código gerenciado, defina a propriedade EnableDataCache como TRUE. Quando o objeto DynamicRenderer recebe uma chamada para o método IStylusSyncPlugin.StylusUp , ele armazena em cache os dados de traço e adiciona dados de caneta personalizados à fila de entrada em resposta ao objeto StylusUpData para o traço. A propriedade CustomDataId do objeto CustomStylusData é definida como o valor DynamicRendererCachedDataGuid e a propriedade Data do objeto CustomStylusData contém um objeto DynamicRendererCachedData. Chame o método ReleaseCachedData do objeto DynamicRenderer depois que o traço for coletado e puder ser renderizado estaticamente. Quando o método Refresh é chamado enquanto o objeto DynamicRenderer está habilitado, o objeto DynamicRenderer redesenha todos os traços armazenados em cache. Quando a propriedade DataCacheEnabled é definida como false, os dados de traço armazenados em cache são excluídos.
O diagrama a seguir ilustra como o objeto DynamicRenderer adiciona dados aos dados da caneta tablet quando a propriedade DataCacheEnabled do objeto DynamicRenderer é definida.
Neste diagrama, o círculo com letras "SD" representa um objeto StylusDown e os círculos com letras "P" representam objetos Packets que já foram adicionados à fila de saída do objeto RealTimeStylus e que ainda não foram enviados para a coleção de plug-ins assíncrona. O círculo com letras "SU" representa um objeto StylusUp que o objeto RealTimeStylus está processando no momento. Ele é enviado para a coleção de plug-in síncrono e colocado na fila de saída. Os círculos com letras "DR" representam dados de caneta personalizados adicionados à fila de entrada pelo plug-in DynamicRenderer em resposta à notificação de caneta associada a "SU". Os dados de caneta personalizados com letras "DR" são então passados para os plug-ins síncronos e, em seguida, para a fila de saída antes que os próximos dados da caneta tablet sejam processados. O círculo vazio representa a posição na fila de saída em que os dados futuros da caneta tablet são adicionados. Também é representado no diagrama o plug-in coletor de tinta que chama o método ReleaseCachedData do objeto DynamicRenderer para liberar os dados de traço armazenados em cache depois que o plug-in da coleção de tintas tiver processado o traço.
Considerações especiais
A lista a seguir descreve outros pontos a serem considerados ao usar o objeto DynamicRenderer .
Você não deve anexar um objeto DynamicRenderer a mais de um objeto RealTimeStylus . Depois que dois objetos RealTimeStylus aos quais o objeto DynamicRenderer está anexado estiverem habilitados, o seguinte ocorrerá.
- O objeto DynamicRenderer gera uma exceção em resposta à segunda chamada ao método RealTimeStylusEnabled .
- O segundo objeto RealTimeStylus habilitado gera um objeto Error e notifica os plug-ins restantes em suas coleções de plug-in do erro.
- O objeto DynamicRenderer para de renderizar dados de caneta tablet.
O objeto RealTimeStylus gera uma exceção quando seu método AddCustomStylusDataToQueue é chamado com o parâmetro guid definido como o GUID (identificador global exclusivo) DynamicRendererCachedDataGuid.
O objeto DynamicRenderer é implementado como um wrapper COM (Component Object Model) e você não pode chamar seus métodos de interface IStylusSyncPlugin diretamente. Para obter mais informações sobre a operação COM e o objeto RealTimeStylus , consulte Notas de implementação para as APIs StylusInput.
Renderização personalizada
Você pode criar seu próprio plug-in de renderizador dinâmico criando um plug-in síncrono que assina as notificações StylusDown, Packets e StylusUp . Em seguida, o plug-in pode renderizar o traço conforme ele está sendo desenhado. Essa pode ser uma maneira de implementar uma ferramenta de seleção que usa uma caixa de seleção ou seleção de formulário livre, por exemplo.