StylusPlugIn Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Representa un complemento que se puede agregar a la propiedad StylusPlugIns del control.
public ref class StylusPlugIn abstract
public abstract class StylusPlugIn
type StylusPlugIn = class
Public MustInherit Class StylusPlugIn
- Herencia
-
StylusPlugIn
- Derivado
Ejemplos
En el ejemplo siguiente se crea un personalizado StylusPlugIn que restringe la entrada de lápiz a un área determinada del control.
// EventArgs for the StrokeRendered event.
public class StrokeRenderedEventArgs : EventArgs
{
StylusPointCollection strokePoints;
public StrokeRenderedEventArgs(StylusPointCollection points)
{
strokePoints = points;
}
public StylusPointCollection StrokePoints
{
get
{
return strokePoints;
}
}
}
// EventHandler for the StrokeRendered event.
public delegate void StrokeRenderedEventHandler(object sender, StrokeRenderedEventArgs e);
// A StylusPlugin that restricts the input area
class FilterPlugin : StylusPlugIn
{
StylusPointCollection collectedPoints;
int currentStylus = -1;
public event StrokeRenderedEventHandler StrokeRendered;
protected override void OnStylusDown(RawStylusInput rawStylusInput)
{
// Run the base class before modifying the data
base.OnStylusDown(rawStylusInput);
if (currentStylus == -1)
{
StylusPointCollection pointsFromEvent = rawStylusInput.GetStylusPoints();
// Create an emtpy StylusPointCollection to contain the filtered
// points.
collectedPoints = new StylusPointCollection(pointsFromEvent.Description);
// Restrict the stylus input and add the filtered
// points to collectedPoints.
StylusPointCollection points = FilterPackets(pointsFromEvent);
rawStylusInput.SetStylusPoints(points);
collectedPoints.Add(points);
currentStylus = rawStylusInput.StylusDeviceId;
}
}
protected override void OnStylusMove(RawStylusInput rawStylusInput)
{
// Run the base class before modifying the data
base.OnStylusMove(rawStylusInput);
if (currentStylus == rawStylusInput.StylusDeviceId)
{
StylusPointCollection pointsFromEvent = rawStylusInput.GetStylusPoints();
// Restrict the stylus input and add the filtered
// points to collectedPoints.
StylusPointCollection points = FilterPackets(pointsFromEvent);
rawStylusInput.SetStylusPoints(points);
collectedPoints.Add(points);
}
}
protected override void OnStylusUp(RawStylusInput rawStylusInput)
{
// Run the base class before modifying the data
base.OnStylusUp(rawStylusInput);
if (currentStylus == rawStylusInput.StylusDeviceId)
{
StylusPointCollection pointsFromEvent = rawStylusInput.GetStylusPoints();
// Restrict the stylus input and add the filtered
// points to collectedPoints.
StylusPointCollection points = FilterPackets(pointsFromEvent);
rawStylusInput.SetStylusPoints(points);
collectedPoints.Add(points);
// Subscribe to the OnStylusUpProcessed method.
rawStylusInput.NotifyWhenProcessed(collectedPoints);
currentStylus = -1;
}
}
private StylusPointCollection FilterPackets(StylusPointCollection stylusPoints)
{
// Modify the (X,Y) data to move the points
// inside the acceptable input area, if necessary
for (int i = 0; i < stylusPoints.Count; i++)
{
StylusPoint sp = stylusPoints[i];
if (sp.X < 50) sp.X = 50;
if (sp.X > 250) sp.X = 250;
if (sp.Y < 50) sp.Y = 50;
if (sp.Y > 250) sp.Y = 250;
stylusPoints[i] = sp;
}
// Return the modified StylusPoints.
return stylusPoints;
}
// This is called on the application thread.
protected override void OnStylusUpProcessed(object callbackData, bool targetVerified)
{
// Check that the element actually receive the OnStylusUp input.
if (targetVerified)
{
StylusPointCollection strokePoints = callbackData as StylusPointCollection;
if (strokePoints == null)
{
return;
}
// Raise the StrokeRendered event so the consumer of the plugin can
// add the filtered stroke to its StrokeCollection.
StrokeRenderedEventArgs e = new StrokeRenderedEventArgs(strokePoints);
OnStrokeRendered(e);
}
}
protected virtual void OnStrokeRendered(StrokeRenderedEventArgs e)
{
if (StrokeRendered != null)
{
StrokeRendered(this, e);
}
}
}
' EventArgs for the StrokeRendered event.
Public Class StrokeRenderedEventArgs
Inherits EventArgs
Private currentStrokePoints As StylusPointCollection
Public Sub New(ByVal points As StylusPointCollection)
currentStrokePoints = points
End Sub
Public ReadOnly Property StrokePoints() As StylusPointCollection
Get
Return currentStrokePoints
End Get
End Property
End Class
' EventHandler for the StrokeRendered event.
Public Delegate Sub StrokeRenderedEventHandler(ByVal sender As Object, ByVal e As StrokeRenderedEventArgs)
' A StylusPlugin that restricts the input area
Class FilterPlugin
Inherits StylusPlugIn
Private collectedPoints As StylusPointCollection
Private currentStylus As Integer = -1
Public Event StrokeRendered As StrokeRenderedEventHandler
Protected Overrides Sub OnStylusDown(ByVal rawStylusInput As RawStylusInput)
' Run the base class before we modify the data
MyBase.OnStylusDown(rawStylusInput)
If currentStylus = -1 Then
Dim pointsFromEvent As StylusPointCollection = rawStylusInput.GetStylusPoints()
' Create an emtpy StylusPointCollection to contain the filtered
' points.
collectedPoints = New StylusPointCollection(pointsFromEvent.Description)
' Restrict the stylus input and add the filtered
' points to collectedPoints.
Dim points As StylusPointCollection = FilterPackets(pointsFromEvent)
rawStylusInput.SetStylusPoints(points)
collectedPoints.Add(points)
currentStylus = rawStylusInput.StylusDeviceId
End If
End Sub
Protected Overrides Sub OnStylusMove(ByVal rawStylusInput As RawStylusInput)
' Run the base class before we modify the data
MyBase.OnStylusMove(rawStylusInput)
If currentStylus = rawStylusInput.StylusDeviceId Then
Dim pointsFromEvent As StylusPointCollection = rawStylusInput.GetStylusPoints()
' Restrict the stylus input and add the filtered
' points to collectedPoints.
Dim points As StylusPointCollection = FilterPackets(pointsFromEvent)
rawStylusInput.SetStylusPoints(points)
collectedPoints.Add(points)
End If
End Sub
Protected Overrides Sub OnStylusUp(ByVal rawStylusInput As RawStylusInput)
' Run the base class before we modify the data
MyBase.OnStylusUp(rawStylusInput)
If currentStylus = rawStylusInput.StylusDeviceId Then
Dim pointsFromEvent As StylusPointCollection = rawStylusInput.GetStylusPoints()
' Restrict the stylus input and add the filtered
' points to collectedPoints.
Dim points As StylusPointCollection = FilterPackets(pointsFromEvent)
rawStylusInput.SetStylusPoints(points)
collectedPoints.Add(points)
RecordPoints(collectedPoints, "collectPoints - StylusUp")
' Subscribe to the OnStylusUpProcessed method.
rawStylusInput.NotifyWhenProcessed(collectedPoints)
currentStylus = -1
End If
End Sub
Private Function FilterPackets(ByVal stylusPoints As StylusPointCollection) As StylusPointCollection
' Modify the (X,Y) data to move the points
' inside the acceptable input area, if necessary.
Dim i As Integer
For i = 0 To stylusPoints.Count - 1
Dim sp As StylusPoint = stylusPoints(i)
If sp.X < 50 Then
sp.X = 50
End If
If sp.X > 250 Then
sp.X = 250
End If
If sp.Y < 50 Then
sp.Y = 50
End If
If sp.Y > 250 Then
sp.Y = 250
End If
stylusPoints(i) = sp
Next i
' Return the modified StylusPoints.
Return stylusPoints
End Function 'FilterPackets
' This is called on the application thread.
Protected Overrides Sub OnStylusUpProcessed(ByVal callbackData As Object, _
ByVal targetVerified As Boolean)
' Check that the element actually receive the OnStylusUp input.
If targetVerified Then
Dim strokePoints As StylusPointCollection
strokePoints = CType(callbackData, StylusPointCollection)
If strokePoints Is Nothing Then
Return
End If
' Raise the StrokeRendered event so the consumer of the plugin can
' add the filtered stroke to its StrokeCollection.
RecordPoints(strokePoints, "onStylusUpProcessed")
Dim e As New StrokeRenderedEventArgs(strokePoints)
OnStrokeRendered(e)
End If
End Sub
Protected Overridable Sub OnStrokeRendered(ByVal e As StrokeRenderedEventArgs)
RaiseEvent StrokeRendered(Me, e)
End Sub
Public Sub RecordPoints(ByVal points As StylusPointCollection, ByVal name As String)
System.Diagnostics.Debug.WriteLine(name)
For Each point As StylusPoint In points
System.Diagnostics.Debug.WriteLine(" x: " & point.X & " y: " & point.Y)
Next
End Sub
End Class
Comentarios
StylusPlugIn permite manipular StylusPoint objetos en subprocesos independientes. Se usan subprocesos independientes para que la entrada de lápiz siga representando los datos de entrada de lápiz de tableta, incluso si la aplicación está haciendo otra cosa.
Para interceptar puntos de lápiz óptico desde el hardware, cree una clase que herede de la StylusPlugIn clase . La StylusPlugIn clase tiene los métodos siguientes que puede invalidar para manipular StylusPoint objetos en un subproceso del grupo de subprocesos de lápiz.
La entrada del lápiz se enruta a los elementos StylusPlugIn del subproceso del lápiz. Dado que las pruebas de posicionamiento precisas no se pueden realizar en el subproceso de lápiz, algunos elementos pueden recibir ocasionalmente entradas de lápiz óptico destinadas a otros elementos. Si necesita asegurarse de que la entrada se enrutó correctamente antes de realizar una operación, suscríbase a la operación y realice la operación en el OnStylusDownProcessedmétodo , OnStylusMoveProcessedo OnStylusUpProcessed . El subproceso de aplicación principal invoca estos métodos después de realizar pruebas de posicionamiento precisas. Para suscribirse a estos métodos, llame al NotifyWhenProcessed método en el método que se produce en el subproceso de lápiz. Por ejemplo, si llama a NotifyWhenProcessed en OnStylusMove, se produce .OnStylusMoveProcessed
Nota
Si usa un dentro StylusPlugIn de un control, debe probar el complemento y controlar ampliamente para asegurarse de que no produzcan excepciones no deseadas.
Uso de texto XAML
Esta clase no se usa normalmente en XAML.
Constructores
StylusPlugIn() |
Inicializa una nueva instancia de la clase StylusPlugIn. |
Propiedades
Element |
Obtiene el objeto UIElement al que se adjunta StylusPlugIn. |
ElementBounds |
Obtiene los límites del elemento almacenados en memoria caché. |
Enabled |
Obtiene o establece si StylusPlugIn está activo. |
IsActiveForInput |
Obtiene si StylusPlugIn puede aceptar la entrada. |
Métodos
Equals(Object) |
Determina si el objeto especificado es igual que el objeto actual. (Heredado de Object) |
GetHashCode() |
Sirve como la función hash predeterminada. (Heredado de Object) |
GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
MemberwiseClone() |
Crea una copia superficial del Object actual. (Heredado de Object) |
OnAdded() |
Se produce cuando el objeto StylusPlugIn se agrega a un elemento. |
OnEnabledChanged() |
Se produce cuando cambia la propiedad Enabled. |
OnIsActiveForInputChanged() |
Se produce cuando cambia la propiedad IsActiveForInput. |
OnRemoved() |
Se produce cuando se quita StylusPlugIn de un elemento. |
OnStylusDown(RawStylusInput) |
Se produce en un subproceso del grupo de subprocesos del lápiz cuando el lápiz de Tablet PC toca el digitalizador. |
OnStylusDownProcessed(Object, Boolean) |
Se produce en un subproceso de la interfaz de usuario de la aplicación cuando el lápiz de Tablet PC toca el digitalizador. |
OnStylusEnter(RawStylusInput, Boolean) |
Se produce en un subproceso del lápiz cuando el cursor entra en los límites de un elemento. |
OnStylusLeave(RawStylusInput, Boolean) |
Se produce en un subproceso del lápiz cuando el cursor sale de los límites de un elemento. |
OnStylusMove(RawStylusInput) |
Se produce en un subproceso del lápiz cuando el lápiz de Tablet PC se mueve en el digitalizador. |
OnStylusMoveProcessed(Object, Boolean) |
Se produce en un subproceso de la interfaz de usuario de la aplicación cuando el lápiz de Tablet PC se mueve en el digitalizador. |
OnStylusUp(RawStylusInput) |
Se produce en un subproceso del lápiz cuando el usuario levanta el lápiz de Tablet PC del digitalizador. |
OnStylusUpProcessed(Object, Boolean) |
Se produce en un subproceso de la interfaz de usuario de la aplicación cuando el usuario levanta el lápiz de Tablet PC del digitalizador. |
ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |