다음을 통해 공유


RealTimeStylus 클래스 작업

RealTimeStylus 클래스는 StylusInput API(애플리케이션 프로그래밍 인터페이스)의 일부입니다. 다음 섹션에서는 RealTimeStylus 클래스 및 StylusInput API의 주요 요소에 대해 설명합니다.

RealTimeStylus 클래스 인스턴스화

RealTimeStylus 개체를 만들 때 창 핸들 또는 컨트롤에 연결할 수 있습니다. RealTimeStylus 개체를 창 핸들에 연결하려면 추가 권한이 필요합니다. 이러한 권한에 대한 자세한 내용은 StylusInput API에 대한 부분 신뢰 고려 사항을 참조하세요.

참고

다른 프로세스에서는 RealTimeStylus 개체를 창이나 컨트롤에 연결할 수 없습니다.

 

기본 생성자를 사용하는 경우 다른 RealTimeStylus 개체의 입력만 허용할 수 있는 RealTimeStylus 개체를 만듭니다. 두 RealTimeStylus 개체를 연결하는 방법에 대한 자세한 내용은 Cascaded RealTimeStylus 모델을 참조하세요.

RealTimeStylus 개체는 IDisposable 인터페이스를 구현합니다.

RealTimeStylus 클래스 확장

플러그 인이 태블릿 펜의 데이터 스트림과 상호 작용할 수 있도록 RealTimeStylus 개체는 GetStylusSyncPlugin 및 C++의 GetStylusAsyncPlugin 메서드와 관리 코드의 SyncPluginCollection 및 AsyncPluginCollection 속성으로 액세스할 수 있는 두 개의 플러그 인 컬렉션을 유지 관리합니다. 적절한 속성 내에서 컬렉션의 AddStylusSyncPlugin 또는 AddStylusAsyncPlugin 메서드를 호출하여 플러그 인을 추가할 수 있습니다. 플러그 인을 만들고 사용하는 방법에 대한 자세한 내용은 플러그 인 및 RealTimeStylus 클래스를 참조하세요. 특정 작업에 대한 동기 또는 비동기 플러그 인을 만들지 여부를 결정하는 방법에 대한 자세한 내용은 StylusInput API에 대한 스레딩 고려 사항 및 StylusInput API 에 대한 성능 고려 사항을 참조하세요.

동기 플러그 인은 IStylusSyncPlugin 인터페이스를 구현해야 하며 비동기 플러그 인은 IStylusAsyncPlugin 인터페이스를 구현해야 합니다. 각 플러그 인에는 IStylusSyncPlugin.DataInterest 또는 IStylusAsyncPlugin.DataInterest 속성이 있습니다. RealTimeStylus 개체는 플러그 인이 구독한 메서드에 대해 플러그 인의 알림 메서드만 호출합니다. 알림 방법에 대한 자세한 내용은 플러그 인 데이터 및 RealTimeStylus 클래스를 참조하세요.

RealTimeStylus 개체는 IStylusAsyncPlugin 인터페이스를 구현합니다. 다른 RealTimeStylus 개체의 입력을 허용하는 RealTimeStylus 개체를 인스턴스화하는 유일한 방법은 기본 생성자를 사용하고 계단식 RealTimeStylus 모델을 구현하는 것입니다. 두 RealTimeStylus 개체를 연결하는 방법에 대한 자세한 내용은 Cascaded RealTimeStylus 모델을 참조하세요.

RealTimeStylus 개체에는 태블릿 펜 데이터, 입력 큐 및 출력 큐를 전달하는 두 개의 내부 큐가 있습니다. 펜 데이터는 Microsoft.StylusInput.PluginData 네임스페이스의 클래스 인스턴스로 변환됩니다. 다음 목록에서는 RealTimeStylus 개체가 태블릿 펜 데이터를 처리하는 방법을 설명합니다.

  1. RealTimeStylus 개체는 먼저 입력 큐에서 플러그 인 데이터 개체를 확인한 다음 태블릿 펜 데이터 스트림에서 확인합니다.
  2. RealTimeStylus 개체는 하나의 플러그 인 데이터 개체를 동기 플러그 인 컬렉션의 개체로 보냅니다. 각 동기 플러그 인은 입력 또는 출력 큐에 데이터를 추가할 수 있습니다.
  3. 플러그 인 데이터 개체가 동기 플러그 인 컬렉션의 모든 멤버로 전송되면 플러그 인 데이터 개체는 RealTimeStylus 개체의 출력 큐에 배치됩니다.
  4. 그런 다음 RealTimeStylus 개체는 처리할 다음 플러그 인 데이터 개체를 확인합니다.
  5. RealTimeStylus 개체의 출력 큐에 데이터가 포함되어 있지만 RealTimeStylus 개체는 출력 큐에서 비동기 플러그 인 컬렉션의 개체로 하나의 플러그 인 데이터 개체를 보냅니다. 각 비동기 플러그 인은 입력 또는 출력 큐에 데이터를 추가할 수 있지만, 비동기 플러그 인이 UI(사용자 인터페이스) 스레드에서 실행되므로 비동기 플러그 인이 처리하는 데이터와 관련이 아니라 RealTimeStylus 개체가 처리 중인 현재 펜 데이터와 관련하여 데이터가 큐에 추가됩니다.

다음 다이어그램에서는 RealTimeStylus 개체 및 플러그 인 컬렉션을 통한 태블릿 펜 데이터의 흐름을 보여 줍니다.

태블릿 PC 펜 데이터 흐름을 보여 주는 illustratiom

이 다이어그램에서 "A" 및 "B"라는 문자가 있는 원은 RealTimeStylus 개체의 출력 큐에 이미 추가되었으며 아직 비동기 플러그 인 컬렉션으로 전송되지 않은 태블릿 펜 데이터를 나타냅니다. 원 문자 "C"는 RealTimeStylus 개체가 현재 처리 중인 태블릿 펜 데이터를 나타냅니다. 동기 플러그 인 컬렉션으로 전송되고 출력 큐에 배치됩니다. 빈 원은 이후 태블릿 펜 데이터가 추가되는 출력 큐의 위치를 나타냅니다.

특정 데이터가 큐에 추가되고 처리되는 방법에 대한 자세한 내용은 플러그 인 데이터 및 RealTimeStylus 클래스를 참조하세요.

다음은 잉크를 수집하는 양식에서 RealTimeStylus 개체를 사용하는 최소 시나리오입니다.

  1. IStylusAsyncPlugin 인터페이스를 구현하는 양식을 만듭니다.
  2. 폼의 컨트롤에 연결된 RealTimeStylus 개체를 만듭니다.
  3. 양식의 IStylusAsyncPlugin.DataInterest 속성에서 StylusDown, Packets 및 StylusUp 알림에 관심을 설정합니다.
  4. 양식의 StylusDown, PacketsStylusUp 메서드에서 양식의 RealTimeStylus 개체에서 전송되는 스타일러스 다운, 패킷 및 스타일러스를 처리하는 코드를 추가합니다.

이러한 애플리케이션의 샘플은 RealTimeStylus Ink 컬렉션 샘플을 참조하세요.

태블릿 개체 작업

사용하도록 설정된 각 RealTimeStylus 개체는 상호 작용할 수 있는 Tablet 개체에 대한 고유 식별자 목록을 유지 관리합니다. RealTimeStylus 개체는 고유 식별자와 Tablet 개체 간에 변환하는 두 가지 메서드인 GetTabletContextIdFromTabletGetTabletFromTabletContextId 메서드를 노출합니다.

관리 코드의 TabletPropertyDescription 개체에는 특정 Tablet 개체에 대한 속성의 범위, 해상도 및 단위를 설명하는 PacketPropertyId 속성과 TabletPropertyMetrics 구조체가 포함되어 있습니다. RealTimeStylus 개체의 GetDesiredPacketDescription 메서드는 해당 패킷 속성을 사용할 수 있을 때 RealTimeStylus 개체가 플러그 인으로 전달하는 패킷 속성에 대한 GUID(Globally Unique Identifier) 배열을 반환합니다. RealTimeStylus 개체가 플러그 인에 전달하는 패킷 속성 집합을 수정하려면 RealTimeStylus 개체의 SetDesiredPacketDescription 메서드를 호출합니다. RealTimeStylus 개체의 GetTabletPropertyDescriptionCollection 메서드(관리 코드)는 고유한 태블릿 식별자를 사용하고 TabletPropertyDescription 개체의 컬렉션을 반환합니다. 이러한 패킷 속성은 GetDesiredPacketDescription 메서드에서 반환되는 태블릿에서 지원하는 속성의 하위 집합을 나타냅니다.

표준 패킷 속성 GUID 목록은 PacketPropertyGuids 상수 클래스를 참조하세요 .

특별 고려 사항

다음 목록에서는 Tablet 개체와 함께 RealTimeStylus 개체를 사용할 때 고려해야 할 다른 사항에 대해 설명합니다.

태블릿 펜 작업

RealTimeStylus 개체는 태블릿 펜에 대한 정보를 여러 알림 방법으로 플러그 인에 전달합니다. 태블릿 펜에 대한 정보는 GetStyluses 메서드를 통해 얻은 Stylus 개체로 표시됩니다. 이 개체는 데이터를 수집할 때 태블릿 펜을 나타냅니다. 플러그 인은 태블릿 펜 데이터 스트림의 일부로 태블릿 펜 데이터를 받기 때문에 플러그 인은 Cursor 클래스를 통해 특정 태블릿 펜의 현재 상태를 확인하는 대신 Stylus 개체의 정보를 사용해야 합니다. 태블릿 펜 및 태블릿 펜 단추 데이터를 플러그 인에 전달하는 방법에 대한 자세한 내용은 플러그 인 데이터 및 RealTimeStylus 클래스를 참조하세요.

RealTimeStylus 개체가 마지막으로 사용하도록 설정된 이후 발견된 Stylus 개체의 배열을 얻으려면 RealTimeStylus 개체의 GetStyluses 메서드를 사용합니다.

Microsoft.Ink.Tablet

Microsoft.StylusInput.RealTimeStylus

Cascaded RealTimeStylus 모델

StylusInput API에 대한 부분 신뢰 고려 사항

플러그 인 데이터 및 RealTimeStylus 클래스

StylusInput API에 대한 스레딩 고려 사항