Freigeben über


InkPicture.NewInAirPackets-Ereignis

Tritt auf, wenn das InkPicture-Steuerelement ein In-Air-Paket erkennt.

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

Syntax

'Declaration
Public Event NewInAirPackets As InkCollectorNewInAirPacketsEventHandler
'Usage
Dim instance As InkPicture
Dim handler As InkCollectorNewInAirPacketsEventHandler

AddHandler instance.NewInAirPackets, handler
public event InkCollectorNewInAirPacketsEventHandler NewInAirPackets
public:
 event InkCollectorNewInAirPacketsEventHandler^ NewInAirPackets {
    void add (InkCollectorNewInAirPacketsEventHandler^ value);
    void remove (InkCollectorNewInAirPacketsEventHandler^ value);
}
/** @event */
public void add_NewInAirPackets (InkCollectorNewInAirPacketsEventHandler value)
/** @event */
public void remove_NewInAirPackets (InkCollectorNewInAirPacketsEventHandler value)
JScript unterstützt keine Ereignisse.

Hinweise

Dieses Ereignis tritt ein, wenn ein Benutzer einen Cursor in den physischen Erfassungsbereich (die Nähe) des Tablettkontexts bewegt, während der Cursor sich im Fenster des InkPicture-Steuerelements befindet, oder wenn der Benutzer eine Maus innerhalb des zugeordneten Fensters des InkPicture-Steuerelements bewegt.

NewInAirPackets werden schnell generiert; der Ereignishandler muss schnell sein, sonst leidet die Leistung.

Der Ereignishandler empfängt ein Argument vom Typ InkCollectorNewInAirPacketsEventArgs, das Daten zu diesem Ereignis enthält.

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 aktiviert, wenn Sie einen Ereignishandler hinzufügen.

Das NewInAirPackets-Ereignis wird selbst 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 ein Rechteck auf das InkPicture-Steuerelement theInkPicture gezeichnet. Der NewInAirPackets-Ereignishandler zeichnet das Rechteck mit einem breiten Umriss, wenn theInkPicture In-Air-Pakete innerhalb der Grenzen des Rechtecks erkennt, und mit einem schmalen Umriss, wenn theInkPicture In-Air-Pakete außerhalb der Grenzen des Rechtecks erkennt. Hierdurch wird veranschaulicht, wie die Paketereignisse zum Steuern des Anwendungsverhaltens verwendet werden.

[C#]

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
    {
    //...

        int indexX, indexY;
        Rectangle rectInterest;
        bool thickBorder;

        public Form1()
        {
            //...

            //Initialize the InkPicture control.
            theInkPicture.InkEnabled = 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
            theInkPicture.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 = theInkPicture.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];
            theInkPicture.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);
        }
    }
}

Dieser Microsoft® Visual Basic® .NET-Ereignishandler zeichnet das Rechteck mit einem breiten Umriss, wenn theInkPicture In-Air-Pakete innerhalb der Grenzen des Rechtecks erkennt, und mit einem schmalen Umriss, wenn theInkPicture In-Air-Pakete außerhalb der Grenzen des Rechtecks erkennt. Hierdurch wird veranschaulicht, wie die Paketereignisse zum Steuern des Anwendungsverhaltens verwendet werden.

[Visual Basic]

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

    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 InkPicture control.
        theInkPicture.InkEnabled = 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 theInkPicture.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 = theInkPicture.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

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

InkPicture-Klasse

InkPicture-Member

Microsoft.Ink-Namespace

Cursor

InkCollectorNewInAirPacketsEventArgs

InkPicture.DesiredPacketDescription

InkPicture.NewPackets