Compartilhar via


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.

captura de tela mostrando o exemplo de scratchpad de toque do Windows usando a caneta em tempo real em c sharp, com rabiscos preto e vermelho na tela

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();
        }

Aplicativo Scratchpad com vários toques (RTS/C#), aplicativo scratchpad com vários toques (RTS/C++), exemplos do Windows Touch