InkPicture.NewPackets Event
InkPicture.NewPackets Event |
Occurs when the InkPicture receives packets.
Definition
Visual Basic .NET Public Event NewPackets As InkCollectorNewPacketsEventHandler C# public event InkCollectorNewPacketsEventHandler NewPackets; Managed C++ public: __event InkCollectorNewPacketsEventHandler NewPackets;
Remarks
Packets are received 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 that contains data about this event.
When you create an InkCollectorNewPacketsEventHandler delegate, you identify the method that will handle 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 should be used carefully as it could have an adverse effect on ink performance if too much code is executed in the event handlers.
Examples
[C#]
This C# example takes an InkPicture named theInkPicture (created in the designer) and 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 { //... 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 new packets theInkPicture.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 = 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 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]; 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); } } }
[Visual Basic .NET]
This Microsoft® Visual Basic® .NET example takes an InkPicture named theInkPicture (created in the designer) and 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 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.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 = 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 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 End Class
See Also