Поделиться через


Сенсорная панель Windows с использованием примера пера Real-Time (C#)

В примере сенсорной панели Windows (MTScratchpadRTStylus) показано, как использовать сообщения Windows Touch для рисования трассировок точек касания в окне. След основного пальца, который был помещен на дигитайзер первым, рисуется черным цветом. Вторичные пальцы рисуются в шести других цветах: красный, зеленый, синий, голубой, пурпурный и желтый. На следующем снимке экрана показано, как приложение может выглядеть во время выполнения.

Снимок экрана: пример сенсорной панели Windows с использованием пера в режиме реального времени в формате C с черными и красными волнистыми на экране

В этом примере создается объект Real-Time Stylus (RTS) и включена поддержка нескольких точек контакта. Подключаемый модуль DynamicRenderer добавляется в RTS для отрисовки содержимого. Реализован подключаемый модуль EventHandlerPlugIn для отслеживания количества пальцев и изменения цвета, который рисует динамический отрисовщик. При использовании обоих подключаемых модулей в стеке подключаемых модулей RTS приложение Windows Touch Scratchpad будет отображать основной контакт черным цветом, а остальные контакты — различными цветами.

В следующем коде показано, как EventHandlerPlugIn увеличивает и уменьшает количество контактов и задает цвет динамического отрисовщика.

        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
        }

В следующем коде показано, как создается RTS с поддержкой нескольких точек контакта.

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

После изменения цвета объекта DynamicRenderer и рисования штрихов вызов DynamicRenderer::Refresh приведет к отображению новых штрихов. В следующем коде показано, как это выполняется в методе 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();
        }

Мультисенсорное приложение (RTS/C#),мультисенсорное приложение для сенсорной панели (RTS/C++),Примеры сенсорного ввода Windows