Condividi tramite


Evento InkCollector.NewInAirPackets

Aggiornamento: novembre 2007

Si verifica quando gli oggetti InkCollector rilevano un pacchetto in-air.

Spazio dei nomi:  Microsoft.Ink
Assembly:  Microsoft.Ink (in Microsoft.Ink.dll)

Sintassi

'Dichiarazione
Public Event NewInAirPackets As InkCollectorNewInAirPacketsEventHandler
'Utilizzo
Dim instance As InkCollector
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 non supporta gli eventi.

Note

Questo evento si verifica quando un utente sposta un cursore all'interno dell'intervallo di rilevamento fisico (prossimità) del contesto della tavoletta mentre il cursore si trova all'interno della finestra dell'oggetto InkCollector oppure quando l'utente sposta il mouse all'interno della finestra associata dell'oggetto InkCollector.

Gli eventi NewInAirPackets vengono generati rapidamente e il gestore eventi deve essere veloce per non compromettere le prestazioni.

Il gestore eventi riceve un argomento di tipo InkCollectorNewInAirPacketsEventArgs contenente i dati relativi a questo evento.

Quando si crea un delegato InkCollectorNewInAirPacketsEventHandler, viene identificato il metodo che gestisce l'evento. Per associare l'evento al gestore eventi in uso, aggiungere all'evento un'istanza del delegato. Il gestore eventi viene chiamato ogni volta che si verifica l'evento, a meno che non si rimuova il delegato. Per motivi di prestazioni, l'interesse dell'evento predefinito è disattivato, ma viene attivato automaticamente se si aggiunge un gestore eventi.

L'evento NewInAirPackets viene generato anche nella modalità di selezione o di gomma, non solo in caso di inserimento di input penna. È necessario monitorare la modalità di modifica (della cui impostazione è responsabile l'utente) ed essere consapevoli di tale modalità prima di interpretare l'evento. Il vantaggio di questo requisito è una maggiore libertà di innovazione della piattaforma grazie a una maggiore consapevolezza degli eventi della piattaforma.

Esempi

In questo esempio di C#, sul form viene tracciato un rettangolo con un contorno in grassetto quando i pacchetti in-air si trovano all'interno del rettangolo o con un contorno sottile quando i pacchetti si trovano al di fuori del rettangolo. In questo modo viene mostrato l'utilizzo degli eventi dei pacchetti per controllare i comportamenti dell'applicazione.

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 questo esempio di Microsoft Visual Basic .NET, sul form viene tracciato un rettangolo con un contorno in grassetto quando i pacchetti in-air si trovano all'interno del rettangolo o con un contorno sottile quando i pacchetti si trovano al di fuori del rettangolo. In questo modo viene mostrato l'utilizzo degli eventi dei pacchetti per controllare i comportamenti dell'applicazione.

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

Piattaforme

Windows Vista

.NET Framework e .NET Compact Framework non supportano tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

Informazioni sulla versione

.NET Framework

Supportato in: 3.0

Vedere anche

Riferimenti

InkCollector Classe

Membri InkCollector

Spazio dei nomi Microsoft.Ink

InkCollectorNewInAirPacketsEventArgs

Cursor

InkCollector.NewPackets

InkCollector.DesiredPacketDescription