Sdílet prostřednictvím


Windows Touch Scratchpad pomocí vzorového stylusu Real-Time (C#)

Ukázka Windows Touch Scratchpad (MTScratchpadRTStylus) ukazuje, jak pomocí zpráv Windows Touch kreslit stopy dotykových bodů do okna. Stopa primárního prstu, ta, která byla poprvé umístěna na digitizátor, je vykreslena černou. Sekundární prsty jsou vykresleny v šesti dalších barvách: červená, zelená, modrá, azurová, purpurová a žlutá. Následující snímek obrazovky ukazuje, jak by aplikace mohla vypadat při spuštění.

snímek obrazovky znázorňující ukázku dotykového poznámkového bloku Windows s použitím stylusu v reálném čase v jazyce C#, s černými a červenými vlnovkami na obrazovce

Pro tuto ukázku se vytvoří objekt Real-Time Stylus (RTS) a povolí se podpora více kontaktních bodů. Modul plug-in DynamicRenderer se přidá do RTS pro vykreslení obsahu. Modul plug-in EventHandlerPlugIn je implementován ke sledování počtu prstů a ke změně barvy výkresu dynamického rendereru. S oběma plug-iny ve stacku plug-inů RTS aplikace Windows Touch Scratchpad vykreslí primární kontakt černě a ostatní kontakty v různých barvách.

Následující kód ukazuje, jak EventHandlerPlugIn zvýší a sníží počet kontaktů a nastaví barvu dynamického rendereru.

        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
        }

Následující kód ukazuje, jak se RTS vytvoří s podporou více kontaktních bodů.

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

Po změně barvy objektu DynamicRenderer a po nakreslení tahů způsobí volání DynamicRenderer::Refresh, že se nové tahy zobrazí. Následující kód ukazuje, jak se to provádí v metodě 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();
        }

vícedotyková aplikace Scratchpad (RTS/C#), vícedotyková aplikace Scratchpad (RTS/C++), ukázky Windows Touch