Windows Touch Scratchpad usando o exemplo de caneta Real-Time (C#)
O exemplo do Windows Touch Scratchpad (MTScratchpadRTStylus) mostra como usar mensagens do Windows Touch para desenhar rastreamentos dos pontos de toque em uma janela. O traço do dedo primário, aquele que foi colocado no digitalizador primeiro, é desenhado em preto. Os dedos secundários são desenhados em outras seis cores: vermelho, verde, azul, ciano, magenta e amarelo. A captura de tela a seguir mostra a aparência do aplicativo durante a execução.
Para este exemplo, o objeto Real-Time Stylus (RTS) é criado e o suporte para vários pontos de contato está habilitado. Um plug-in DynamicRenderer é adicionado ao RTS para renderizar o conteúdo. Um plug-in, EventHandlerPlugIn, é implementado para rastrear o número de dedos e alterar a cor que o renderizador dinâmico está desenhando. Com ambos os plug-ins na pilha de plug-ins RTS, o aplicativo Windows Touch Scratchpad renderizará o contato principal em preto e o restante dos contatos nas várias cores.
O código a seguir mostra como o EventHandlerPlugIn incrementa e diminui uma contagem do número de contatos e define a cor do renderizador dinâmico.
public void StylusDown(RealTimeStylus sender, StylusDownData data)
{
// Set new stroke color to the DrawingAttributes of the DynamicRenderer
// If there are no fingers down, this is a primary contact
dynamicRenderer.DrawingAttributes.Color = touchColor.GetColor(cntContacts == 0);
++cntContacts; // Increment finger-down counter
}
public void StylusUp(RealTimeStylus sender, StylusUpData data)
{
--cntContacts; // Decrement finger-down counter
}
O código a seguir mostra como o RTS é criado com suporte a vários pontos de contato.
private void OnLoadHandler(Object sender, EventArgs e)
{
// Create RealTimeStylus object and enable it for multi-touch
realTimeStylus = new RealTimeStylus(this);
realTimeStylus.MultiTouchEnabled = true;
// Create DynamicRenderer and event handler, and add them to the RTS object as synchronous plugins
dynamicRenderer = new DynamicRenderer(this);
eventHandler = new EventHandlerPlugIn(this.CreateGraphics(), dynamicRenderer);
realTimeStylus.SyncPluginCollection.Add(eventHandler);
realTimeStylus.SyncPluginCollection.Add(dynamicRenderer);
// Enable RTS and DynamicRenderer object, and enable auto-redraw of the DynamicRenderer
realTimeStylus.Enabled = true;
dynamicRenderer.Enabled = true;
dynamicRenderer.EnableDataCache = true;
}
Depois que a cor do objeto DynamicRenderer for alterada e os traços forem desenhados, uma chamada para DynamicRenderer::Refresh fará com que os novos traços apareçam. O código a seguir mostra como isso é executado no método OnPaintHandler.
private void OnPaintHandler(object sender, PaintEventArgs e)
{
// Erase the background
Brush brush = new SolidBrush(SystemColors.Window);
e.Graphics.FillRectangle(brush, ClientRectangle);
// Ask DynamicRenderer to redraw itself
dynamicRenderer.Refresh();
}
Tópicos relacionados
Aplicativo Scratchpad com vários toques (RTS/C#), aplicativo scratchpad com vários toques (RTS/C++), exemplos do Windows Touch