플러그 인 데이터 및 RealTimeStylus 클래스
RealTimeStylus 클래스에 대한 플러그 인은 IStylusSyncPlugin 또는 IStylusAsyncPlugin 인터페이스 또는 둘 다를 구현해야 합니다. 모든 플러그 인 인터페이스 메서드를 구현해야 하지만 플러그 인은 플러그 인 Microsoft.StylusInput.IStylusSyncPlugin.DataInterest 또는 Microsoft.StylusInput.IStylusAsyncPlugin.DataInterest 속성에 플래그가 지정된 메서드에 대한 호출만 수신합니다.
인터페이스에 정의된 메서드는 Microsoft.StylusInput.PluginData 네임스페이스의 개체를 사용하여 펜 데이터를 플러그 인에 전달합니다. 다음 표에서는 알림 메서드의 매개 변수인 데이터 개체에 대해 설명하고 알림과 연결된 DataInterestMask 값을 나열합니다.
플러그 인 데이터 | DataInterestMask 값 | 설명 |
---|---|---|
CustomStylusData | CustomStylusDataAdded | 플러그 인이 추가하는 사용자 지정 애플리케이션 데이터입니다. |
ErrorData | 오류 | 해당 플러그 인 중 하나에서 처리되지 않은 예외에 대한 응답으로 RealTimeStylus 개체가 추가하는 오류 정보입니다. |
InAirPacketsData | InAirPackets | 스타일러스가 디지타이저 위에 있는 동안 스타일러스 동작에 대한 패킷 정보입니다. |
PacketsData | 패킷 수 | 스타일러스가 디지타이저를 터치하는 동안 스타일러스 동작에 대한 패킷 정보입니다. |
RealTimeStylusDisabledData | RealTimeStylusDisabled |
RealTimeStylus 개체가 사용하지 않도록 설정될 때 추가하는 정보입니다. |
RealTimeStylusEnabledData | RealTimeStylusEnabled |
RealTimeStylus 개체가 활성화될 때 추가하는 정보입니다. |
StylusButtonDownData | StylusButtonDown | 누르고 있는 특정 스타일러스 단추에 대한 정보입니다. |
StylusButtonUpData | StylusButtonUp | 릴리스되는 특정 스타일러스 단추에 대한 정보입니다. |
스타일러스다운데이타 | 스타일러스다운 | 스타일러스가 디지타이저와 접촉할 때 스타일러스에 대한 패킷 정보입니다. |
StylusInRangeData | StylusInRange |
RealTimeStylus 개체의 입력 영역에 들어가거나 RealTimeStylus 개체의 입력 영역 위에 디지타이저의 검색 범위를 입력하는 특정 스타일러스에 대한 정보입니다. |
StylusOutOfRangeData | StylusOutOfRange |
RealTimeStylus 개체의 입력 영역을 벗어나거나 디지타이저의 검색 범위를 RealTimeStylus 개체의 입력 영역 위에 두는 특정 스타일러스에 대한 정보입니다. |
StylusUpData | 스타일러스업 | 스타일러스가 디지타이저에서 해제될 때 스타일러스에 대한 패킷 정보입니다. |
SystemGestureData | SystemGesture |
RealTimeStylus 개체가 시스템 제스처를 감지할 때 추가하는 정보입니다. |
TabletAddedData | TabletAdded | 추가되는 Tablet 개체에 대한 정보입니다. |
TabletRemovedData | TabletRemoved | 제거되는 Tablet 개체에 대한 정보입니다. |
RealTimeStylus 개체가 태블릿 펜 데이터 스트림을 처리하는 방법에 대한 자세한 내용은 RealTimeStylus 클래스 작업을 참조하세요.
데이터 관심
RealTimeStylus 개체는 플러그 인이 RealTimeStylus 개체의 동기 또는 비동기 플러그 인 컬렉션에 추가되면 플러그 인의 Microsoft.StylusInput.IStylusSyncPlugin.DataInterest 또는 Microsoft.StylusInput.IStylusAsyncPlugin.DataInterest 속성을 확인합니다. 따라서 DataInterest 속성을 사용하여 플러그 인에서 이 instance 사용하는 모든 알림을 구독해야 하지만, 플러그 인의 이 instance 절대 사용하지 않는 알림은 자주 사용하지 않습니다. 플러그 인이 가끔만 사용하는 알림의 경우 먼저 알림 방법에서 플러그 인 상태를 검사 플러그 인이 현재 상태에서 플러그 인에서 사용되지 않는 경우 를 반환합니다.
플러그 인은 플러그 인의 Microsoft.StylusInput.IStylusSyncPlugin.DataInterest 또는 Microsoft.StylusInput.IStylusAsyncPlugin.DataInterest 속성에 플래그가 지정된 메서드에 대한 호출만 수신합니다. 플러그 인의 DataInterest 속성의 가능한 값에 대한 자세한 내용은 DataInterestMask 열거형을 참조하세요.
타이밍
데이터는 비동기 플러그 인 컬렉션의 플러그 인에 전달되기 전에 RealTimeStylus 개체에 큐에 대기합니다. 다음 목록에서는 비동기 플러그 인을 디자인할 때 고려해야 할 몇 가지 상황에 대해 설명합니다.
- RealTimeStylus 개체를 사용하지 않도록 설정하면 비동기 플러그 인은 RealTimeStylusDisabled 메서드가 호출되기 전에 대기 중인 다른 알림을 받을 수 있습니다. 이 경우 플러그 인에서 RealTimeStylus 개체의 메서드 및 속성 중 일부에 대한 호출은 예외를 throw합니다. RealTimeStylus 개체를 사용할 때 플러그 인과 관련된 정보를 캐시해야 합니다.
- RealTimeStylus 개체의 ClearStylusQueues 메서드는 출력 큐에서 정보를 제거할 수 있습니다. 따라서 비동기 플러그 인은 모든 관련 알림을 수신하는 데 의존할 수 없습니다.
- RealTimeStylus 개체에 사용할 수 있는 Tablet 개체가 제거되면 비동기 플러그 인은 TabletRemoved 메서드가 호출되기 전에 태블릿에 대해 대기 중인 스타일러스 알림을 받을 수 있습니다. 이 경우 RealTimeStylus 개체의 GetTabletPropertyDescriptionCollection 메서드를 호출하지 않습니다. RealTimeStylus 개체를 사용하도록 설정하거나 새 태블릿을 추가할 때 플러그 인과 관련된 정보를 캐시해야 합니다.
애플리케이션에 따라 RealTimeStylus 개체를 사용하지 않도록 설정할 때 성능을 향상시킬 수 있습니다. RealTimeStylus 개체의 Enabled 속성이 FALSE로 설정되면 입력 및 출력 큐의 데이터는 큐가 비어 있을 때까지 처리됩니다. RealTimeStylus 개체의 ClearStylusQueues 메서드를 호출하여 RealTimeStylus 개체를 사용하지 않도록 설정하기 전에 큐를 지울 수 있습니다.
사용 및 사용 안 함 데이터
RealTimeStylus 개체를 사용하도록 설정하면 각 플러그 인은 Microsoft.StylusInput.IStylusSyncPlugin.RealTimeStylusEnabled 또는 Microsoft.StylusInput.IStylusAsyncPlugin.RealTimeStylusEnabled 메서드에 대한 호출을 받습니다. 알림에 전달된 RealTimeStylusEnabledData 개체에는 RealTimeStylus 개체를 사용하도록 설정할 때 사용 가능한 태블릿에 대한 컨텍스트 식별자 컬렉션이 포함되어 있습니다.
참고
RealTimeStylus 개체의 비동기 플러그 인 컬렉션에 대한 플러그 인 데이터가 큐에 대기되고 있으므로 비동기 플러그 인은 RealTimeStylusDisabled 메서드에 대한 호출을 받기 전에 RealTimeStylus 개체를 사용하지 않도록 설정한 후에 데이터를 받을 수 있습니다. RealTimeStylus 개체가 비활성화된 경우 RealTimeStylus 개체의 메서드 및 속성 중 일부는 예외를 throw합니다.
RealTimeStylus 개체는 RealTimeStylus 개체가 활성화되거나 동기 플러그 인이 추가된 스레드에서 Microsoft.StylusInput.IStylusSyncPlugin.RealTimeStylusSyncPlugin.RealTimeStylusDisabled 메서드를 호출합니다.
일반적으로 RealTimeStylus 개체가 사용하지 않도록 설정된 동안 플러그 인을 추가하거나 제거합니다. RealTimeStylus 개체에 플러그 인을 추가하고 제거하는 방법에 대한 자세한 내용은 플러그 인 및 RealTimeStylus 클래스를 참조하세요.
태블릿 데이터
RealTimeStylus 개체를 사용하는 동안 RealTimeStylus 개체가 사용할 수 있는 태블릿을 태블릿 PC에 추가하거나 제거하면 RealTimeStylus 개체가 플러그 인에 Tablet 개체가 추가되거나 제거되었음을 알릴 수 있습니다. 각 RealTimeStylus 개체는 상호 작용할 수 있는 Tablet 개체에 대한 고유 식별자 목록을 유지 관리합니다. RealTimeStylus 개체에는 고유 식별자와 Tablet 개체, GetTabletContextIdFromTablet 및 GetTabletFromTabletContextId 메서드 간에 변환하는 두 가지 메서드가 있습니다.
참고
태블릿에 대한 정보는 태블릿 PC에서 태블릿이 제거된 후 RealTimeStylus 개체에서 더 이상 사용할 수 없습니다.
태블릿 펜 데이터
RealTimeStylus 개체는 태블릿 펜에 대한 정보를 여러 알림 방법으로 플러그 인에 전달합니다. 태블릿 펜에 대한 정보는 스타일러스 개체로 표시됩니다. 이 개체는 데이터를 수집할 때 태블릿 펜의 상태를 스냅샷. 플러그 인은 태블릿 펜 데이터 스트림의 일부로 태블릿 펜 데이터를 수신하므로 플러그 인은 커서 클래스를 통해 특정 태블릿 펜의 현재 상태를 확인하는 대신 Stylus 개체의 정보를 사용해야 합니다.
각 스타일러스 개체에는 데이터를 생성한 태블릿의 태블릿 컨텍스트 식별자가 포함됩니다.
시스템 제스처 데이터
RealTimeStylus 개체는 태블릿 PC에서 인식할 때 시스템 제스처에 대한 데이터를 받습니다. 다음 표에서는 다른 태블릿 펜 데이터와 관련하여 태블릿 펜 데이터 스트림에서 SystemGestureData 개체가 발생하는 순서를 설명합니다.
SystemGesture | SystemGestureData 개체 앞에 오는 개체 | SystemGestureData 개체 다음에 오는 개체 |
---|---|---|
탭 |
StylusDownData 개체입니다. |
StylusUpData 개체입니다. |
DoubleTap |
StylusDownData 개체, Tap 시스템 제스처의 SystemGestureData 개체 및 StylusUpData 개체입니다. |
두 번째 StylusDownData 개체입니다 . |
RightTap | SystemGesure 열거형의 HoldEnter 멤버에 대한 StylusDownData 개체 및 SystemGestureData 개체입니다. |
StylusUpData 개체입니다. |
끌기 |
StylusDownData 개체입니다. |
StylusUpData 개체입니다. |
RightDrag |
StylusDownData 개체입니다. |
StylusUpData 개체입니다. |
HoldEnter |
StylusDownData 개체입니다. |
StylusUpData 개체입니다. 참고: 이 시스템 제스처는 사용자가 끌어서 또는RightDrag 시스템 제스처를 시작하는 경우 인식되지 않습니다. |
HoldLeave | 구현되지 않았습니다. |
구현되지 않았습니다. |
HoverEnter | 평균 속도가 낮은 여러 InAirPacketsData 개체입니다. |
참고:HoverEnter 시스템 제스처를 수신하기 전에 눈에 띄는 지연이 있을 수 있습니다.
RealTimeStylus 개체는 RealTimeStylus 개체가 시스템 제스처 시 펜 바로 아래에 있는 창 또는 컨트롤에 연결된 경우에만 이 데이터를 수신합니다. |
HoverLeave |
HoverEnter 시스템 제스처에 대한 SystemGestureData 개체 및 평균 속도가 충분한 여러 InAirPacketsData 개체입니다. |
참고:HoverLeave 시스템 제스처를 수신하기 전에 눈에 띄는 지연이 있을 수 있습니다.
RealTimeStylus 개체는 RealTimeStylus 개체가 시스템 제스처 시 펜 바로 아래에 있는 창 또는 컨트롤에 연결된 경우에만 이 데이터를 수신합니다. |
사용자 지정 스타일러스 데이터
사용자 지정 스타일러스 데이터는 AddCustomStylusDataToQueue 메서드를 호출하여 RealTimeStylus 개체에 추가할 수 있습니다. 사용자 지정 스타일러스 데이터는 세 위치 중 하나에서 RealTimeStylus 개체의 큐에 추가할 수 있습니다.
- 큐 매개 변수가 Output으로 설정되면 동기 플러그 인 컬렉션에서 현재 처리 중인 데이터가 나면 사용자 지정 데이터가 RealTimeStylus 개체의 출력 큐에 추가됩니다.
- queue 매개 변수를 OutputImmediate로 설정하면 동기 플러그 인 컬렉션에서 현재 처리 중인 데이터가 있기 전에 사용자 지정 데이터가 RealTimeStylus 개체의 출력 큐에 추가됩니다.
- 큐 매개 변수가 Input으로 설정되면 사용자 지정 데이터가 RealTimeStylus 개체의 입력 큐에 추가되고 태블릿 펜의 데이터 스트림에서 새 데이터 앞에 동기 플러그 인 컬렉션으로 전송됩니다.
이전의 각 경우에서 동기 플러그 인 컬렉션의 후속 플러그 인에 의해 추가된 데이터는 이전 플러그 인에 의해 추가된 데이터가 추가된 후에 추가됩니다.
참고
IStylusSyncPlugin 메서드 중 하나에 대한 호출에 대한 응답으로 동기 플러그 인에서 AddCustomStylusDataToQueue 메서드를 호출하면 사용자 지정 스타일러스 데이터가 예측 가능한 방식으로 태블릿 펜 데이터 스트림에 추가됩니다. 그렇지 않으면 비동기 플러그 인이 처리 중인 데이터가 아니라 RealTimeStylus 개체가 처리 중인 현재 펜 데이터와 관련하여 큐에 추가됩니다. RealTimeStylus 개체를 사용하지 않도록 설정하면 AddCustomStylusDataToQueue 메서드가 예외를 throw합니다.
사용자 지정 스타일러스 데이터는 CustomStylusData 개체로 큐에 추가되고 플러그 인은 Microsoft.StylusInput.IStylusSyncPlugin.CustomStylusDataAdded 또는 Microsoft.StylusInput.IStylusAsyncPlugin.CustomStylusDataAdded 메서드를 통해 이 데이터를 수신합니다.
DynamicRenderer 및 GestureRecognizer 개체는 사용자 지정 스타일러스 데이터를 큐에 추가할 수 있습니다. DynamicRenderer 및 GestureRecognizer 개체에 대한 자세한 내용은 Dynamic-Renderer 플러그 인 및 Recognizer 플러그 인을 참조하세요.
RealTimeStylus 개체는 AddCustomStylusDataToQueue 메서드에 대한 호출을 수신하는 스레드에서 Microsoft.StylusInput.IStylusSyncPlugin.CustomStylusDataAdded 메서드를 호출합니다.
다음 다이어그램에서는 큐 매개 변수가 Output으로 설정된 출력 큐에 사용자 지정 스타일러스 데이터를 추가하는 방법을 보여 줍니다.
이 다이어그램에서 "A" 및 "B"라는 문자가 있는 원은 RealTimeStylus 개체의 출력 큐에 이미 추가되었으며 아직 비동기 플러그 인 컬렉션으로 전송되지 않은 태블릿 펜 데이터를 나타냅니다. 원 문자 "C"는 RealTimeStylus 개체가 현재 처리 중인 태블릿 펜 데이터를 나타냅니다. 동기 플러그 인 컬렉션으로 전송되고 출력 큐에 배치됩니다. "1", "2", "3"으로 번호가 매겨진 원은 "C"로 표시되는 태블릿 펜 데이터에 대한 응답으로 각각 첫 번째, 두 번째 및 세 번째 동기 플러그 인에 의해 출력 큐에 추가된 사용자 지정 스타일러스 데이터를 나타냅니다. 플러그 인은 큐 매개 변수가 StylusQueues로 설정된 사용자 지정 스타일러스 데이터를 추가했습니다. 빈 원은 이후 태블릿 펜 데이터가 추가되는 출력 큐의 위치를 나타냅니다.
다음 다이어그램에서는 큐 매개 변수가 OutputImmediate로 설정된 출력 큐에 사용자 지정 스타일러스 데이터를 추가하는 방법을 보여 줍니다.
이 다이어그램에서 "A" 및 "B"라는 문자가 있는 원은 RealTimeStylus 개체의 출력 큐에 이미 추가되었으며 아직 비동기 플러그 인 컬렉션으로 전송되지 않은 태블릿 펜 데이터를 나타냅니다. 원 문자 "C"는 RealTimeStylus 개체가 현재 처리 중인 태블릿 펜 데이터를 나타냅니다. 동기 플러그 인 컬렉션으로 전송되고 출력 큐에 배치됩니다. "1", "2", "3"으로 번호가 매겨진 원은 "C"로 표시되는 태블릿 펜 데이터에 대한 응답으로 각각 첫 번째, 두 번째 및 세 번째 동기 플러그 인에 의해 출력 큐에 추가된 사용자 지정 스타일러스 데이터를 나타냅니다. 플러그 인은 큐 매개 변수가 OutputImmediate로 설정된 사용자 지정 스타일러스 데이터를 추가했습니다. 빈 원은 이후 태블릿 펜 데이터가 추가되는 출력 큐의 위치를 나타냅니다.
다음 다이어그램에서는 입력 큐에 사용자 지정 스타일러스 데이터를 추가하는 방법을 보여 줍니다.
이 다이어그램에서 "A" 및 "B"라는 문자가 있는 원은 RealTimeStylus 개체의 출력 큐에 이미 추가되었으며 아직 비동기 플러그 인 컬렉션으로 전송되지 않은 태블릿 펜 데이터를 나타냅니다. 원 문자 "C"는 RealTimeStylus 개체가 현재 처리 중인 태블릿 펜 데이터를 나타냅니다. 동기 플러그 인 컬렉션으로 전송되고 출력 큐에 배치됩니다. "1", "2", "3"으로 번호가 매겨진 원은 "C"로 표시되는 태블릿 펜 데이터에 대한 응답으로 각각 첫 번째, 두 번째 및 세 번째 동기 플러그 인에 의해 입력 큐에 추가된 사용자 지정 스타일러스 데이터를 나타냅니다. 플러그 인은 큐 매개 변수가 Input으로 설정된 사용자 지정 스타일러스 데이터를 추가 했습니다. 그런 다음 사용자 지정 스타일러스 데이터 번호가 "1"인 사용자 지정 스타일러스 데이터가 다음 태블릿 펜 데이터가 처리되기 전에 처리되는 "2" 및 "3"으로 번호가 매겨진 사용자 지정 스타일러스 데이터가 동기 플러그 인에 전달된 다음 출력 큐에 전달됩니다. 빈 원은 이후 태블릿 펜 데이터가 추가되는 출력 큐의 위치를 나타냅니다.
오류 데이터
플러그 인에서 예외를 throw하면 데이터의 정상적인 흐름이 중단됩니다. RealTimeStylus 개체는 ErrorData 개체를 생성하고 다음을 호출합니다.
- 예외를 throw한 플러그 인의 Microsoft.StylusInput.IStylusSyncPlugin.Error 또는 Microsoft.StylusInput.IStylusAsyncPlugin.Error 메서드입니다.
- 해당 컬렉션에 남아 있는 플러그 인의 Microsoft.StylusInput.IStylusSyncPlugin.Error 또는 Microsoft.StylusInput.IStylusAsyncPlugin.Error 메서드입니다.
예외를 throw한 플러그 인이 동기 플러그 인이면 ErrorData 개체가 출력 큐에 추가됩니다. 그런 다음 RealTimeStylus 개체는 원래 데이터의 정상적인 처리를 다시 시작합니다.
다음 다이어그램에서는 태블릿 펜 데이터에 오류 데이터를 추가하는 방법을 보여 줍니다.
이 다이어그램에서 "A" 및 "B"라는 문자가 있는 원은 RealTimeStylus 개체의 출력 큐에 이미 추가되었으며 아직 비동기 플러그 인 컬렉션으로 전송되지 않은 태블릿 펜 데이터를 나타냅니다. 원 문자 "C"는 RealTimeStylus 개체가 현재 처리 중인 태블릿 펜 데이터를 나타냅니다. 원 문자 "e"는 두 번째 동기 플러그 인인 동기 플러그 인 2가 "C"를 처리하는 동안 예외를 throw할 때 RealTimeStylus 개체에서 생성된 ErrorData 개체를 나타냅니다. 그런 다음 RealTimeStylus 개체는 "C" 처리를 일시 중지하고 예외 및 모든 후속 플러그 인을 생성한 플러그 인에 "e"를 전달합니다. 그런 다음 RealTimeStylus 개체는 출력 큐에 "e"를 배치하고 동기 플러그 인 컬렉션의 나머지 플러그 인에 전달되고 "e" 다음에 출력 큐에 배치되는 "C" 처리를 다시 시작합니다. 빈 원은 이후 태블릿 펜 데이터가 추가되는 출력 큐의 위치를 나타냅니다.
플러그 인이 Error 메서드에서 예외를 throw하는 경우 RealTimeStylus 개체는 예외를 catch하지만 새 ErrorData 개체를 생성하지는 않습니다. 이는 재귀를 방지하기 위한 것입니다.
오류 데이터는 오류 데이터를 만든 예외 이전에 OutputImmediate 위치에 추가된 사용자 지정 스타일러스 데이터와 동기 플러그 인 컬렉션의 후속 플러그 인에 의해 OutputImmediate 위치에 추가된 사용자 지정 스타일러스 데이터 앞에 출력 큐에 추가됩니다.
다음 다이어그램에서는 OutputImmediate 큐에 추가된 사용자 지정 데이터와 관련하여 오류 데이터가 출력 큐에 추가되는 방법을 보여 줍니다.
이 다이어그램에서 "A" 및 "B"라는 문자가 있는 원은 RealTimeStylus 개체의 출력 큐에 이미 추가되었으며 아직 비동기 플러그 인 컬렉션으로 전송되지 않은 태블릿 펜 데이터를 나타냅니다. 원 문자 "C"는 RealTimeStylus 개체가 현재 처리 중인 태블릿 펜 데이터를 나타냅니다. "1", "2", "3"으로 번호가 매겨진 원은 "C"라는 원 문자로 표시된 데이터에 대한 응답으로 각각 첫 번째, 두 번째 및 세 번째 동기 플러그 인에 의해 OutputImmediate 큐에 추가됩니다. "e"라는 원 문자는 두 번째 플러그 인이 OutputImmediate 위치의 출력 큐에 사용자 지정 데이터를 추가한 후 두 번째 플러그 인에서 throw된 예외에 대한 응답으로 생성된 오류 데이터를 나타냅니다.
동기 플러그 인이 오류 데이터에 대한 응답으로 입력 큐에 사용자 지정 스타일러스 데이터를 추가하는 경우 데이터는 오류 데이터 바로 앞에 추가됩니다. 동기 플러그 인이 오류 데이터에 대한 응답으로 출력 위치의 출력 큐에 사용자 지정 스타일러스 데이터를 추가하는 경우 오류 데이터 직후에 데이터가 추가됩니다.
RealTimeStylus 개체는 예외가 throw된 스레드에서 Microsoft.StylusInput.IStylusSyncPlugin.Error 메서드를 호출합니다.
관련 항목