InkOverlay.NewPackets Event
Occurs when the InkOverlay receives packets.
Namespace: Microsoft.Ink
Assembly: Microsoft.Ink (in microsoft.ink.dll)
Syntax
'Declaration
Public Event NewPackets As InkCollectorNewPacketsEventHandler
'Usage
Dim instance As InkOverlay
Dim handler As InkCollectorNewPacketsEventHandler
AddHandler instance.NewPackets, handler
public event InkCollectorNewPacketsEventHandler NewPackets
public:
event InkCollectorNewPacketsEventHandler^ NewPackets {
void add (InkCollectorNewPacketsEventHandler^ value);
void remove (InkCollectorNewPacketsEventHandler^ value);
}
/** @event */
public void add_NewPackets (InkCollectorNewPacketsEventHandler value)
/** @event */
public void remove_NewPackets (InkCollectorNewPacketsEventHandler value)
In JScript, you can handle the events defined by a class, but you cannot define your own.
Not applicable.
Remarks
An InkOverlay object receives packet while a stroke is being collected. Packet events occur rapidly, and a NewPackets event handler must be fast or performance suffers.
The event handler receives an argument of type InkCollectorNewPacketsEventArgs containing data about this event.
When you create an InkCollectorNewPacketsEventHandler delegate, you identify the method that handles the event. To associate the event with your event handler, add an instance of the delegate to the event. The event handler is called whenever the event occurs, unless you remove the delegate. For performance reasons, the default event interest is off but is turned on automatically if you add an event handler.
This event may have an adverse effect on ink performance if too much code is executed in the event handlers.
Example
This C# example draws a rectangle on the form with a bold outline when the packets are within the rectangle or with a narrow outline when the packets are outside the rectangle. This demonstrates how to use the packet events to control application behaviors.
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using Microsoft.Ink;
namespace CSNewPacketEvents
{
public class Form1 : System.Windows.Forms.Form
{
//...
InkOverlay theInkOverlay;
int indexX, indexY;
Rectangle rectInterest;
bool thickBorder;
public Form1()
{
//...
//Initialize the InkOverlay object.
theInkOverlay = new InkOverlay(Handle);
theInkOverlay.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 new packets
theInkOverlay.NewPackets += new InkCollectorNewPacketsEventHandler(NewPackets_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 = theInkOverlay.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 NewPackets_Event(object sender, InkCollectorNewPacketsEventArgs e)
{
Graphics g = this.CreateGraphics();
Point [] pt = new Point [1];
pt[0].X = e.PacketData[indexX];
pt[0].Y = e.PacketData[indexY];
theInkOverlay.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)
{
theInkOverlay.Dispose();
theInkOverlay = null;
}
}
}
This Microsoft Visual Basic .NET example draws a rectangle on the form with a bold outline when the packets are within the rectangle or with a narrow outline when the packets are outside the rectangle. This demonstrates how to use the packet events to control application behaviors.
Imports Microsoft.Ink
Public Class Form1
Inherits System.Windows.Forms.Form
Dim theInkOverlay As InkOverlay
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 InkOverlay object.
theInkOverlay = New InkOverlay(Handle)
theInkOverlay.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 theInkOverlay.NewPackets, AddressOf NewPackets_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 = theInkOverlay.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 NewPackets_Event(ByVal sender As Object, _
ByVal e As InkCollectorNewPacketsEventArgs)
'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
theInkOverlay.Dispose()
Set theInkOverlay = Nothing
End Sub
End Class
Platforms
Windows 98, Windows Server 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
The Microsoft .NET Framework 3.0 is supported on Windows Vista, Microsoft Windows XP SP2, and Windows Server 2003 SP1.
Version Information
.NET Framework
Supported in: 3.0
See Also
Reference
InkOverlay Class
InkOverlay Members
Microsoft.Ink Namespace
Cursor
InkCollectorNewPacketsEventArgs
InkOverlay.DesiredPacketDescription
InkOverlay.NewPackets