사용자 지정 잉크 수집기에서 텍스트 수정 사용
Microsoft 태블릿 PC 입력 패널은 펜으로 필기 텍스트를 입력하고 키보드를 사용하지 않고 텍스트를 수정하는 강력한 도구입니다. 입력 패널을 사용하는 경우 사용자가 입력 패널의 수동 입력 화면에 필기하여 텍스트를 입력합니다. 그러면 입력 패널에서 사용자의 필기를 텍스트로 인식하게 됩니다. 텍스트가 인식되면 사용자가 입력 패널에서 삽입을 탭하여 애플리케이션 또는 문서에 텍스트를 삽입합니다. 텍스트를 삽입하기 전에 사용자는 입력 패널의 수정 도구 집합에 액세스할 수 있습니다. 여기에는 대체 인식 결과 선택, 단일 문자를 다시 작성하는 기능 또는 전체 단어를 스크래치 아웃하고 다시 작성하는 기능이 포함되었습니다. 이러한 수정 도구를 사용하면 사용자가 인식 오류와 사용자 오류를 모두 수정할 수 있습니다.
입력 패널을 사용하여 입력한 텍스트가 문서에 있으면 사용자는 Windows Text Services 프레임워크 기반 및 Text Services 지원 애플리케이션에 삽입하기 전에 사용할 수 있는 것과 동일한 수정 기능에 액세스할 수 있습니다. Microsoft Windows XP 서비스 팩 2 태블릿 PC 버전부터 모든 리치 편집 애플리케이션은 기본적으로 Text Services를 사용하도록 설정되며 Windows Vista부터 HTML 애플리케이션은 기본적으로 Text Services를 사용하도록 설정됩니다. 문서 내 수정은 Text Service 기반 및 사용하도록 설정된 애플리케이션에서만 사용할 수 있습니다. 입력 패널은 문서 내 수정을 제공하기 위해 잉크 개체 및 인식 대체를 포함하여 연결된 텍스트 속성을 저장하는 Text Service의 기능에 종속되기 때문입니다.
그러나 입력 패널을 사용하여 텍스트 입력으로 시작되지는 않지만 태블릿 PC 사용자에게 문서 내 수정이 매우 유용할 수 있는 이동 중에도 음성 인식 수정 또는 입력된 텍스트 수정을 비롯한 다양한 시나리오가 있습니다. 대표적인 예는 펜을 사용하여 텍스트를 입력하기 위한 사용자 지정 수동 입력 표면을 제공하는 애플리케이션입니다. 사용자 지정 수동 입력 표면은 애플리케이션이 각 애플리케이션의 텍스트 입력 작업과 관련된 고유하게 맞춤화된 기능을 제공하는 좋은 방법입니다. 또한 사용자 지정 수동 입력 표면은 완전히 통합된 태블릿 PC 사용자 환경을 제공하므로 펜이 포함된 애플리케이션의 일류 입력 장치임을 분명히 합니다. 그러나 사용자 지정 수동 입력 화면을 제공하는 애플리케이션은 입력 패널 문서 내 수정에서 사용할 수 있는 것과 동일한 수준의 수정 지원을 허용하지 않거나 제공하지 못할 수 있습니다.
입력 패널을 사용하여 입력되지 않은 텍스트를 수정하는 데 문서 내 수정이 유용한 Text Services 기반 또는 활성화된 애플리케이션은 입력 패널의 IHandWrittenTextInsertion API(관리 코드에서 Microsoft.TextInput.HandwrittenTextInsertion 클래스)를 사용하여 다른 방법으로 입력한 텍스트에 대해 문서 내 수정을 사용하도록 설정할 수 있습니다. 이러한 방식으로 애플리케이션은 사용자 지정 수동 입력 화면 또는 기타 텍스트 입력 시나리오에 강력한 수정 지원을 저렴하게 추가하고 태블릿 PC 텍스트 입력 스토리를 반올림할 수 있습니다. 입력 패널 IHandWrittenTextInsertion API는 Windows Vista 운영 체제의 일부이며 태블릿 플랫폼 SDK 버전 1.9 이상의 일부로 포함됩니다. API의 .NET 및 COM 기반 버전이 모두 포함됩니다. 입력 패널을 사용하여 입력되지 않은 텍스트에 대해 문서 내 수정을 사용하도록 설정하는 기능은 Windows Vista 이상에서 지원됩니다. 문서 내 수정은 라틴어에만 사용할 수 있으며 라틴 문자 집합 외부의 문자를 표시할 수 없습니다.
애플리케이션에서 HandwrittenTextInsertion API를 사용하는 방법
입력 패널을 사용하고 IHandWrittenTextInsertion API를 사용하여 입력하지 않은 텍스트에 대한 입력 패널 문서 내 수정을 통합하기 위해 애플리케이션에 필요한 변경 내용은 간단합니다. 마지막 단계를 제외하고 애플리케이션의 모든 사용자 지정 텍스트 입력 코드는 변경되지 않은 상태로 유지됩니다. 사용자 지정 수동 입력 화면, 음성 인식 또는 기타 수단을 사용하여 입력한 텍스트가 텍스트 서비스 사용 텍스트 필드에 표시되는 지점에서 애플리케이션은 텍스트를 텍스트 필드로 직접 보내는 대신 IHandWrittenTextInsertion 인터페이스로 보냅니다. 그런 다음 입력 패널 프로그래밍 기능 구성 요소는 텍스트 필드와 Text Services 백업 저장소 모두에 텍스트 삽입을 처리합니다. Text Services 백업 저장소에 텍스트를 추가할 때 입력 패널 프로그래밍 기능 구성 요소는 해당 텍스트에 대해 문서 내 수정을 사용하도록 설정하기 위해 입력 패널에 필요한 텍스트 속성 설정을 처리합니다.
다음 섹션에서는 IHandWrittenTextInsertion API의 COM 버전을 사용하는 C++ 애플리케이션에 대해 이 프로세스를 자세히 설명합니다. C#에서 .NET Framework 버전의 API를 사용하는 단계는 C++에서 COM 버전을 사용하는 것과 다른 노트가 있습니다. 관리되는 HandwrittenTextInsertion API에는 단일 COM 인터페이스인 IHandwrittenTextInsertion이 포함되어 있습니다. 이 인터페이스에 대한 정의는 PenInputPanel.h 및 PenInputPanel_i.c에 있습니다.
먼저 애플리케이션은 CoCreateInstance 함수를 사용하여 클래스 ID가 CLSID_HandwrittenTextInsertion IHandWrittenTextInsertion의 instance 생성해야 합니다. 그때까지 Text Services 백업 저장소가 활성화되지 않으므로 창이 만들어지고 포커스가 지정된 후에만 CLSID_HandwrittenTextInsertion 개체를 만들 수 있습니다. 또한 시스템에 tiptsf.dll 없는 경우 CoCreateInstance 함수가 실패하고 REGDB_E_CLASSNOTREG 반환합니다. 이는 입력 패널 문서 내 수정이 시스템에서 지원되지 않음을 나타냅니다. 이 시점에서 애플리케이션은 입력 패널 문서 내 수정을 사용하도록 설정하지 않고 진행해야 합니다. 텍스트 필드에 텍스트 삽입을 처리하는 애플리케이션 코드에서 HandwrittenTextInsertion의 instance 액세스할 수 있어야 합니다.
참고
.NET Framework 버전의 API로 작업할 때 애플리케이션은 Microsoft.Ink.TextInput 네임스페이스에 대한 액세스를 허용한 다음 개체를 직접 만들 수 있도록 using 문을 추가해야 합니다.
둘째, 텍스트 필드에 텍스트를 삽입하는 애플리케이션의 코드는 더 이상 텍스트 필드에 직접 텍스트를 삽입하지 않고 IHandwrittenTextInsertion의 두 삽입 메서드 중 하나 또는 다른 메서드를 호출할 수 있도록 변경해야 합니다. 애플리케이션이 InsertRecognitionResultsArray 또는 InsertRecognitionResults 를 호출하도록 선택해야 하는지 여부는 애플리케이션에 배열 또는 IInkRecognitionResult 개체로 저장된 텍스트에 대한 인식 대체 항목이 있는지 여부에 따라 달라집니다.
참고
관리 코드에서 작업할 때 InsertRecognitionResultsArray에서 사용하는 해당 인식 개체는 RecognitionResult입니다. 두 메서드 모두 다음 세 가지 매개 변수를 사용합니다.
- 대체 배열 배열 또는 IInkRecognitionResult (또는 RecognitionResult) 개체로 저장된 문자열의 2차원 컬렉션입니다. 대체 항목이 배열의 배열로 저장되는 경우 안전한 배열 포인터로 전달되어야 합니다. 최상위 배열의 각 항목은 삽입에서 한 단어에 대한 대체 목록입니다. 대체 하위 배열의 위치 0에 있는 항목은 텍스트 필드에 삽입되는 텍스트입니다. 추가 대체 항목(각 하위 배열의 인덱스 1~n)은 Text Services 백업 저장소에 저장되고 문서 내 수정의 일부로 선택 항목으로 사용자에게 제공됩니다. 대체 항목이 포함되지 않으면 대체 항목 목록 대신 '제안 없음'이 표시됩니다. 삽입에 공백이 있는 여러 단어가 포함된 경우 각 공백을 최상위 배열의 항목으로 포함해야 합니다.
- 언어 대체 매개 변수에 포함된 텍스트에 해당하는 입력 언어 LCID입니다. 필기 또는 음성 인식기에서 대체 콘텐츠가 생성된 경우 사용된 인식기와 연결된 Languages 속성이기도 합니다.
- fLatticeContainsAutoSpacingInformation대체 매개 변수에 포함된 텍스트가 자동 간격을 사용하도록 설정된 인식기에서 생성되었는지 여부를 나타내는 플래그입니다. 자동 간격을 사용하도록 설정한 경우 플래그를 TRUE로 설정해야 합니다. 자동 간격을 사용하지 않도록 설정한 경우 플래그를 FALSE로 설정해야 합니다. 대체 콘텐츠가 자동 간격을 지원하지 않는 인식기에서 생성되었거나 인식기에서 전혀 생성되지 않은 경우 플래그를 FALSE로 설정해야 합니다.
입력 패널의 프로그래밍 기능 모델은 시스템 캐리트의 위치에서 문서 또는 애플리케이션의 텍스트를 삽입할 수 있습니다.
삽입이 성공하면 두 메서드 모두 S_OK 반환합니다. 애플리케이션이 Text Services 기반이 아니거나 사용하도록 설정되지 않은 경우 E_NOINTERFACE 반환하고 대체 형식이 잘못되었거나 액세스할 수 없는 경우 E_INVALIDARG. 또한 시스템에서 사용할 수 있는 메모리가 충분하지 않은 경우 E_OUTOFMEMORY 반환하거나 Text Services 프레임워크가 사용하도록 설정되지 않은 것과 같은 치명적인 오류가 발생한 후 E_FAIL 수 있습니다.
결론
입력 패널을 사용하여 입력 패널을 사용하지 않는 텍스트에 대해 입력 패널 문서 내 수정을 사용하도록 설정하는 것은 Text Services 기반 또는 지원 애플리케이션이 강력한 펜 기반 수정 기능으로 사용자 지정 수동 입력 또는 입력 방법을 보완하는 저렴하고 쉬운 방법입니다. Windows Vista에서 모든 리치 편집 및 Trident 애플리케이션은 Text Services를 사용하도록 설정됩니다. 통합 수동 입력 화면은 사용자 지정 태블릿 PC 사용자 환경을 애플리케이션에 추가하는 데 유용한 옵션이지만 수정 기능이 포함되지 않은 경우 텍스트 항목의 절반만 지원합니다. 문서 내 수정은 인식 대체를 위해 선택 영역을 교환하거나 선택 영역의 일부 또는 전체를 다시 작성하는 기능을 추가하여 스토리의 나머지 절반을 사용자에게 제공합니다.
관련 항목