다음을 통해 공유


StylusPlugIn 클래스

정의

컨트롤의 StylusPlugIns 속성에 추가할 수 있는 플러그 인을 나타냅니다.

public ref class StylusPlugIn abstract
public abstract class StylusPlugIn
type StylusPlugIn = class
Public MustInherit Class StylusPlugIn
상속
StylusPlugIn
파생

예제

다음 예제에서는 사용자 지정 StylusPlugIn 잉크 컨트롤에 있는 특정 영역을 제한 하는 합니다.

// 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

설명

합니다 StylusPlugIn 조작할 수 있도록 StylusPoint 별도 스레드에서 개체입니다. 별도 스레드는 잉크 태블릿 펜 입력 데이터와 애플리케이션은 다른 작업을 실행 하는 경우에 여전히 렌더링 되도록 사용 됩니다.

하드웨어의 스타일러스 포인트를 가로채에서 상속 되는 클래스를 만들고 여 StylusPlugIn 클래스입니다. 합니다 StylusPlugIn 클래스에 메서드를 조작 하기 위해 재정의할 수 있습니다. StylusPoint 개체 펜 스레드에서 스레드 풀입니다.

펜 입력 요소의 라우팅됩니다 StylusPlugIn 펜 스레드입니다. 펜 스레드에서 정확한 적중 테스트를 수행할 수 없습니다, 이후 일부 요소가 다른 요소에 대 한 스타일러스 입력을 받는 경우도 합니다. 입력이 작업을 수행 하기 전에 올바르게 라우트 되도록 해야 하는 경우 등록 하 고 작업을 수행 합니다 OnStylusDownProcessed, OnStylusMoveProcessed, 또는 OnStylusUpProcessed 메서드. 이러한 메서드는 정확한 적중 테스트가 수행 된 후 주 애플리케이션 스레드에 의해 호출 됩니다. 를 구독 하려면 이러한 메서드 호출을 NotifyWhenProcessed 펜 스레드에서 발생 하는 방법에 대 한 메서드. 예를 들어, 호출 하는 경우 NotifyWhenProcessedOnStylusMoveOnStylusMoveProcessed 발생 합니다.

참고

사용 하는 경우는 StylusPlugIn 컨트롤 안에 테스트 플러그 인 및 의도 하지 않은 예외를 throw 하지 않습니다 되도록 광범위 하 게 제어 해야 합니다.

XAML 텍스트 사용

이 클래스는 XAML에서 일반적으로 사용 되지 않습니다.

생성자

StylusPlugIn()

StylusPlugIn 클래스의 새 인스턴스를 초기화합니다.

속성

Element

UIElement가 연결된 StylusPlugIn를 가져옵니다.

ElementBounds

요소의 캐시된 범위를 가져옵니다.

Enabled

StylusPlugIn이 활성 상태인지 여부를 가져오거나 설정합니다.

IsActiveForInput

StylusPlugIn이 입력을 받아들일 수 있는지 여부를 가져옵니다.

메서드

Equals(Object)

지정된 개체가 현재 개체와 같은지 확인합니다.

(다음에서 상속됨 Object)
GetHashCode()

기본 해시 함수로 작동합니다.

(다음에서 상속됨 Object)
GetType()

현재 인스턴스의 Type을 가져옵니다.

(다음에서 상속됨 Object)
MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.

(다음에서 상속됨 Object)
OnAdded()

StylusPlugIn가 요소에 추가되면 발생합니다.

OnEnabledChanged()

Enabled 속성이 변경되면 발생합니다.

OnIsActiveForInputChanged()

IsActiveForInput 속성이 변경되면 발생합니다.

OnRemoved()

요소에서 StylusPlugIn이 제거되면 발생합니다.

OnStylusDown(RawStylusInput)

태블릿 펜이 디지타이저에 닿을 때 펜 스레드 풀의 스레드에서 발생합니다.

OnStylusDownProcessed(Object, Boolean)

태블릿 펜이 디지타이저에 닿을 때 애플리케이션 UI(사용자 인터페이스) 스레드에서 발생합니다.

OnStylusEnter(RawStylusInput, Boolean)

커서가 요소 범위 안으로 들어올 때 펜 스레드에서 발생합니다.

OnStylusLeave(RawStylusInput, Boolean)

커서가 요소 범위를 벗어날 때 펜 스레드에서 발생합니다.

OnStylusMove(RawStylusInput)

태블릿 펜이 디지타이저에서 움직일 때 펜 스레드에서 발생합니다.

OnStylusMoveProcessed(Object, Boolean)

태블릿 펜이 디지타이저 위에서 이동할 때 애플리케이션 UI(사용자 인터페이스) 스레드에서 발생합니다.

OnStylusUp(RawStylusInput)

사용자가 태블릿 펜을 디지타이저에서 뗄 때 펜 스레드에서 발생합니다.

OnStylusUpProcessed(Object, Boolean)

사용자가 태블릿 펜을 디지타이저에서 뗄 때 애플리케이션 UI(사용자 인터페이스) 스레드에서 발생합니다.

ToString()

현재 개체를 나타내는 문자열을 반환합니다.

(다음에서 상속됨 Object)

적용 대상