Windows Touch Scratchpad con el ejemplo de lápiz Real-Time (C#)

La muestra de Windows Touch Scratchpad (MTScratchpadRTStylus) muestra cómo usar mensajes de Windows Touch para dibujar seguimientos de los puntos táctiles en una ventana. El rastro del dedo primario, el que se puso en el digitalizador primero, se dibuja en negro. Los dedos secundarios se dibujan en seis otros colores: rojo, verde, azul, cian, magenta y amarillo. En la captura de pantalla siguiente se muestra el aspecto de la aplicación mientras se ejecuta.

captura de pantalla que muestra la muestra del panel táctil de windows con el lápiz óptico en tiempo real en c sharp, con subrayados ondulados negros y rojos en la pantalla

Para este ejemplo, se crea el objeto Real-Time Stylus (RTS) y se habilita la compatibilidad con varios puntos de contacto. Se agrega un complemento DynamicRenderer al RTS para representar el contenido. Un complemento, EventHandlerPlugIn, se implementa para rastrear el número de dedos y cambiar el color que dibuja el representador dinámico. Con ambos complementos en la pila del complemento RTS, la aplicación Windows Touch Scratchpad representará el contacto principal en negro y el resto de los contactos en los distintos colores.

En el código siguiente se muestra cómo EventHandlerPlugIn incrementa y disminuye un recuento del número de contactos y establece el color del representador 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
        }

En el código siguiente se muestra cómo se crea el RTS con compatibilidad con varios puntos de contacto.

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

Una vez que el color del objeto DynamicRenderer ha cambiado y se han dibujado trazos, una llamada a DynamicRenderer::Refresh hará que aparezcan los nuevos trazos. El código siguiente muestra cómo se realiza esto en el 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();
        }

Aplicación de panel temporal multitáctil (RTS/C#),, Aplicación de panel temporal multitáctil (RTS/C++), muestras táctiles de Windows