InkPicture.SystemGesture Event
InkPicture.SystemGesture Event |
Occurs when a system gesture is recognized.
Definition
Visual Basic .NET Public Event SystemGesture As InkCollectorSystemGestureEventHandler C# public event InkCollectorSystemGestureEventHandler SystemGesture; Managed C++ public: __event InkCollectorSystemGestureEventHandler SystemGesture;
Remarks
System gestures are useful because they give information about the Cursor object that is being used to create the gesture. They also provide shortcuts to combinations of mouse events and are "cheaper" ways to detect mouse events.
For example, instead of looking for a MouseUp /MouseDown pair of events with no other mouse events occurring in between, you can look for the Tap or RightTap system gestures.
As another example, instead of listening for MouseDown /MouseMove events and getting numerous MouseMove messages, you can watch for the Drag or RightDrag system gestures as long as you're not interested in the (x, y) coordinates of every position of the mouse. This allows you to receive only one message instead of numerous MouseMove messages.
For a list of specific system gestures, see the SystemGesture enumeration type. For more information about system gestures, see Making Windows Work with a Pen.
The event handler receives an argument of type InkCollectorSystemGestureEventArgs that contains data about this event.
When you create an InkCollectorSystemGestureEventHandler 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.
Examples
[C#]
This C# example displays gesture event information in the status bar of the main form window. Starting with a generic generated application, add an InkPicture called theInkPicture and a status bar called statusBar1 to the main form and add the following code.
//... using Microsoft.Ink; namespace CSGestureEvents { public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.StatusBar statusBar1; private Microsoft.Ink.InkPicture theInkPicture; // ... The generated code will be here. //Add this code following the implementation of Main(): private void Form1_Load(object sender, System.EventArgs e) { theInkPicture.CollectionMode = CollectionMode.InkAndGesture; ClearAppGestures(); // Turn on interest in the ChevronDown and ChevronUp application gestures. theInkPicture.SetGestureStatus(ApplicationGesture.ChevronDown, true); theInkPicture.SetGestureStatus(ApplicationGesture.ChevronUp, true); theInkPicture.Gesture += new InkCollectorGestureEventHandler(Gesture_Event); theInkPicture.SystemGesture += new InkCollectorSystemGestureEventHandler(SystemGesture_Event); theInkPicture.InkEnabled = true; } private void Gesture_Event(object sender, InkCollectorGestureEventArgs e) { ApplicationGesture theGestureId = e.Gestures[0].Id; statusBar1.Text = theGestureId.ToString(); // Cancelling the gesture will cause the ink to remain. if (theGestureId == ApplicationGesture.ChevronDown) e.Cancel = true; } private void SystemGesture_Event(object sender, InkCollectorSystemGestureEventArgs e) { SystemGesture theGestureId = e.Id; statusBar1.Text = "System: " + theGestureId.ToString() + " " + e.Point.ToString(); } // Set all of the ApplicationGestures' status // to false on the InkPicture. private void ClearAppGestures() { ApplicationGesture test = ApplicationGesture.NoGesture; System.Array theGestureIds = System.Enum.GetValues(test.GetType()); foreach (ApplicationGesture theGestureId in theGestureIds) { theInkPicture.SetGestureStatus(theGestureId, false); } } } }
[Visual Basic .NET]
This Microsoft® Visual Basic® .NET example displays gesture event information in the status bar of the main form window. Starting with a generic generated application, add an InkPicture called theInkPicture and a status bar called statusBar1 to the main form and add the following code.
Imports Microsoft.Ink Public Class Form1 Inherits System.Windows.Forms.Form #Region " Windows Form Designer generated code " 'This contains the standard generated form code Friend statusBar1 As System.Windows.Forms.StatusBar Friend theInkPicture As Microsoft.Ink.InkPicture '... #End Region Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Set the InkOverlay to collect both ink and gestures. theInkPicture.CollectionMode = CollectionMode.InkAndGesture 'Clear interest in all of the application gestures ClearAppGestures() 'Set the interest in only two gestures. theInkPicture.SetGestureStatus(ApplicationGesture.ChevronDown, True) theInkPicture.SetGestureStatus(ApplicationGesture.ChevronUp, True) 'Add the handlers for application and system gestures. AddHandler theInkPicture.Gesture, AddressOf Gesture_Event AddHandler theInkPicture.SystemGesture, AddressOf SystemGesture_Event theInkPicture.InkEnabled = True End Sub Private Sub Gesture_Event(ByVal sender As Object, _ ByVal e As InkCollectorGestureEventArgs) Dim theGestureId As ApplicationGesture = e.Gestures(0).Id StatusBar1.Text = theGestureId.ToString() 'Cancelling the gesture will cause the ink to remain. If theGestureId = ApplicationGesture.ChevronDown Then e.Cancel = True End If End Sub Private Sub SystemGesture_Event( _ ByVal sender As Object, _ ByVal e As InkCollectorSystemGestureEventArgs) Dim theGestureId As SystemGesture = e.Id StatusBar1.Text = "System: " + theGestureId.ToString() + " " + e.Point.ToString() End Sub ' Set all of the ApplicationGestures' status ' to false on the InkOverlay object. Private Sub ClearAppGestures() Dim test As ApplicationGesture = ApplicationGesture.NoGesture Dim theGestureIds As System.Array = System.Enum.GetValues(test.GetType()) Dim theGestureId As ApplicationGesture For Each theGestureId In theGestureIds theInkPicture.SetGestureStatus(theGestureId, False) Next End Sub End Class
See Also