Freigeben über


InkCollectorNewInAirPacketsEventHandler-Delegat

Stellt die Methode dar, die das NewInAirPackets-Ereignis eines InkCollector-Objekts behandelt.

Namespace:  Microsoft.Ink
Assembly:  Microsoft.Ink (in Microsoft.Ink.dll)

Syntax

'Declaration
Public Delegate Sub InkCollectorNewInAirPacketsEventHandler ( _
    sender As Object, _
    e As InkCollectorNewInAirPacketsEventArgs _
)
'Usage
Dim instance As New InkCollectorNewInAirPacketsEventHandler(AddressOf HandlerMethod)
public delegate void InkCollectorNewInAirPacketsEventHandler(
    Object sender,
    InkCollectorNewInAirPacketsEventArgs e
)
public delegate void InkCollectorNewInAirPacketsEventHandler(
    Object^ sender, 
    InkCollectorNewInAirPacketsEventArgs^ e
)
/** @delegate */
public delegate void InkCollectorNewInAirPacketsEventHandler(
    Object sender,
    InkCollectorNewInAirPacketsEventArgs e
)
JScript unterstützt keine Delegaten.

Parameter

Hinweise

Ein In-Air-Paket wird erstellt, wenn ein Benutzer einen Stift in der Nähe des Tabletts bewegt und sich der Cursor innerhalb des Fensters des InkCollector-Objekts befindet oder der Benutzer eine Maus innerhalb des Fensters bewegt, das dem InkCollector-Objekt zugeordnet ist. NewInAirPackets-Ereignisse werden schnell generiert, und der Ereignishandler muss umgehend reagieren, damit die Leistung nicht beeinträchtigt wird.

Beim Erstellen eines InkCollectorNewInAirPacketsEventHandler-Delegaten bestimmen Sie die Methode für die Ereignisbehandlung. Um dem Ereignishandler das Ereignis zuzuordnen, fügen Sie dem Ereignis eine Instanz des Delegaten hinzu. Der Ereignishandler wird bei jedem Eintreten des Ereignisses aufgerufen, sofern der Delegat nicht entfernt wird. Aus Leistungsgründen ist das Standardinteresse an einem Ereignis deaktiviert, es wird jedoch automatisch im verwalteten Code aktiviert, wenn Sie einen Ereignishandler hinzufügen.

Das NewInAirPackets-Ereignis wird auch im Auswahl- oder Löschmodus ausgelöst, nicht nur bei Freihandeingaben. Dies erfordert, dass Sie den Bearbeitungsmodus (den Sie festlegen müssen) überwachen und den Modus kennen, bevor Sie das Ereignis interpretieren. Der Vorteil dieser Anforderung besteht in einer größeren Flexibilität für Neuerungen auf der Plattform, da Plattformereignisse besser erkannt werden können.

Beispiele

In diesem C#-Beispiel wird im Formular ein Rechteck mit einem breiten Umriss gezeichnet, wenn sich die In-Air-Pakete innerhalb des Rechtecks befinden, oder mit einem schmalen Umriss, wenn sich die Pakete außerhalb des Rechtecks befinden. Hierdurch wird veranschaulicht, wie die Paketereignisse zum Steuern des Anwendungsverhaltens verwendet werden.

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using Microsoft.Ink;

namespace CSInAirPacketEvents
{
    public class Form1 : System.Windows.Forms.Form
    {
    //...

        InkCollector theInkCollector;
        int indexX, indexY;
        Rectangle rectInterest;
        bool thickBorder;

        public Form1()
        {
            //...

            //Initialize the InkCollector object.
            theInkCollector= new InkCollector(Handle);
            theInkCollector.Enabled = true;

            //Initialize the target rectangle
            rectInterest = new Rectangle(40, 40, 200, 80);
            thickBorder = false;

            //Save the X and Y data locations within the packet data.
            GetXYIndexes(ref indexX, ref indexY);

            //Add the event handler for in-air packets
            theInkCollector.NewInAirPackets += new InkCollectorNewInAirPacketsEventHandler(NewInAirPackets_Event);
        }

//...

        private void GetXYIndexes(ref int theXIndex, ref int theYIndex)
        {
            // Get the indexes of the X and Y data within the raw
            // packet data array.
            Guid [] theGuids = theInkCollector.DesiredPacketDescription;
            for (int i = 0; i < theGuids.Length; i++)
            {
                if (theGuids[i].Equals(PacketProperty.X))
                    theXIndex = i;
                if (theGuids[i].Equals(PacketProperty.Y))
                    theYIndex = i;
            }
        }

        private void NewInAirPackets_Event(object sender, InkCollectorNewInAirPacketsEventArgs e)
        {
            Graphics g = this.CreateGraphics();
            Point [] pt = new Point [1];
            pt[0].X = e.PacketData[indexX];
            pt[0].Y = e.PacketData[indexY];
            theInkCollector.Renderer.InkSpaceToPixel(g, ref pt);

            // The event may return with data for multiple packets.
            // To simplify things, we'll only look at the first.
            if (rectInterest.Contains(pt[0].X, pt[0].Y))
            {
                if (!thickBorder)
                {
                    thickBorder = true;
                    Refresh();
                }
            }
            else
            {
                if (thickBorder)
                {
                    thickBorder = false;
                    Refresh();
                }
            }
        }

        private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            Pen thePen = new Pen(Color.Black, 2);
            if (thickBorder)
                thePen.Width = 5;
            g.DrawRectangle(thePen, rectInterest);
        }

        // Event handler for the form's closed event
        private void Form1_Closed(object sender, System.EventArgs e)
        {
            theInkCollector.Dispose();
            theInkCollector= null;
        }
    }
}

In diesem Microsoft® Visual Basic® .NET-Beispiel wird im Formular ein Rechteck mit einem breiten Umriss gezeichnet, wenn sich die In-Air-Pakete innerhalb des Rechtecks befinden, oder mit einem schmalen Umriss, wenn sich die Pakete außerhalb des Rechtecks befinden. Hierdurch wird veranschaulicht, wie die Paketereignisse zum Steuern des Anwendungsverhaltens verwendet werden.

Imports Microsoft.Ink
Public Class Form1
    Inherits System.Windows.Forms.Form

    Dim theInkCollector As InkCollector
    Dim indexX, indexY As Integer
    Dim rectInterest As Rectangle
    Dim thickBorder As Boolean

'...

    Public Sub New()
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Initialize the InkCollector object.
        theInkCollector = New InkCollector(Handle)
        theInkCollector.Enabled = True

        'Initialize the target rectangle
        rectInterest = New Rectangle(40, 40, 200, 80)
        thickBorder = False

        'Save the X and Y data locations within the packet data.
        GetXYIndexes(indexX, indexY)

        'Add the event handler for in air packets
        AddHandler theInkCollector.NewInAirPackets, AddressOf NewInAirPackets_Event

    End Sub

'...

    Private Sub GetXYIndexes(ByRef theXIndex As Integer, _
        ByRef theYIndex As Integer)
        ' Get the indexes of the X and Y data within the raw
        ' packet data array.
        Dim theGuids() As Guid = theInkCollector.DesiredPacketDescription
        Dim i As Integer
        For i = 0 To theGuids.Length - 1
            If theGuids(i).Equals(PacketProperty.X) Then
                theXIndex = i
            End If
            If theGuids(i).Equals(PacketProperty.Y) Then
                theYIndex = i
            End If
        Next
    End Sub

    Private Sub NewInAirPackets_Event(ByVal sender As Object, _
        ByVal e As InkCollectorNewInAirPacketsEventArgs)
        'The event may return with data for multiple packets.
        'To simplify things, we'll only look at the first.
        If rectInterest.Contains( _
            e.PacketData(indexX), e.PacketData(indexY)) Then
            If thickBorder = False Then
                thickBorder = True
                Refresh()
            End If
        Else
            If thickBorder = True Then
                thickBorder = False
                Refresh()
            End If
        End If
    End Sub

    Private Sub Form1_Paint(ByVal sender As Object, _
        ByVal e As System.Windows.Forms.PaintEventArgs) _
        Handles MyBase.Paint
        Dim g As Graphics = e.Graphics
        Dim thePen As New Pen(Color.Black, 2)
        If thickBorder Then
            thePen.Width = 5
        End If
        g.DrawRectangle(thePen, rectInterest)
    End Sub

    'Event handler for the form's closed event
    Private Sub Form1_Closed(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Closed
        theInkCollector.Dispose()
        Set theInkCollector = Nothing
    End Sub
End Class

Plattformen

Windows Vista

.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Versionsinformationen

.NET Framework

Unterstützt in: 3.0

Siehe auch

Referenz

Microsoft.Ink-Namespace

Cursor

InkCollector.DesiredPacketDescription

InkCollector.NewPackets