텍스트 및 TextRange 컨트롤 패턴
속성 및 메서드에 대한 정보를 포함하여 ITextProvider, ITextProvider2및 ITextRangeProvider구현하기 위한 지침 및 규칙에 대해 설명합니다. Text 컨트롤 패턴을 사용하면 애플리케이션과 컨트롤이 간단한 텍스트 개체 모델을 노출할 수 있으므로 클라이언트는 텍스트 기반 컨트롤에서 텍스트 콘텐츠, 텍스트 특성 및 포함된 개체를 검색할 수 있습니다.
Text 컨트롤 패턴을 지원하기 위해 컨트롤은 ITextProvider 및 ITextProvider2 인터페이스를 구현합니다. 텍스트 컨트롤 패턴을 지원해야 하는 컨트롤 형식에는 편집 및 문서 컨트롤 형식과 사용자가 텍스트를 입력하거나 읽기 전용 텍스트를 선택할 수 있는 다른 컨트롤 형식이 포함됩니다.
텍스트 컨트롤 패턴은 다른 Microsoft UI 자동화 컨트롤 패턴과 함께 사용하여 표, 하이퍼링크 및 명령 단추를 포함하여 텍스트에 포함된 여러 유형의 개체를 지원할 수 있습니다.
ITextProvider 및 ITextProvider2 인터페이스에는 텍스트 범위를 가져오는 여러 메서드가 포함됩니다. 텍스트 범위는 텍스트 컨테이너의 연속된 텍스트 범위 또는 여러 개의 연결되지 않은 텍스트 범위를 나타내는 개체입니다. 한 ITextProvider 메서드는 전체 문서를 나타내는 텍스트 범위를 얻는 반면, 다른 하나는 선택한 텍스트, 표시되는 텍스트 또는 텍스트에 포함된 개체와 같이 문서의 일부를 나타내는 텍스트 범위를 가져옵니다.
텍스트 범위 개체는 ITextRangeProvider 인터페이스를 통해 구현되는 TextRange 컨트롤 패턴으로 표시됩니다. TextRange 컨트롤 패턴은 범위의 텍스트에 대한 정보를 노출하고, 범위의 엔드포인트를 이동하고, 텍스트를 선택하거나 선택 취소하고, 범위를 보기로 스크롤하는 데 사용되는 메서드와 속성을 제공합니다.
Text 및 TextRange 컨트롤 패턴에 대한 자세한 내용은 텍스트 콘텐츠 대한UI 자동화 지원을 참조하세요.
Windows 8.1 공급자부터는 ITextRangeProvider2 인터페이스를 구현할 수 있습니다. 이렇게 하면 텍스트 범위와 연결된 상황에 맞는 메뉴를 호출할 수 있습니다. 텍스트 자동 고침 또는 IME(입력 메서드 편집기) 후보 선택과 같은 시나리오를 지원합니다.
이 항목에는 다음 섹션이 포함되어 있습니다.
- 구현 지침 및 규칙
- ITextProvider필요한 멤버
- ITextRangeProvider필요한 멤버
- 지원 텍스트 범위
- 시스템 캐럿 상호 운용성
- 관련 항목
구현 지침 및 규칙
Text 컨트롤 패턴을 구현하는 경우 다음 지침 및 규칙을 확인합니다.
- 텍스트에 액세스할 수 있는 컨트롤(예: 텍스트 입력 또는 읽기 전용 텍스트 선택)은 Text 컨트롤 패턴을 지원해야 합니다.
- Text 컨트롤 패턴은 텍스트를 표시하는 모든 UI 요소와 함께 사용할 수 있으며 표준 단추 컨트롤의 정적 레이블도 사용할 수 있습니다. 그러나 선택할 수 없거나 삽입 지점이 없는 정적 텍스트 컨트롤에는 필요하지 않습니다.
- 텍스트에 완전히 액세스할 수 있도록 하려면 ITextProvider 구현하는 컨트롤도 IValueProvider 인터페이스를 지원해야 합니다. IValueProvider 텍스트를 변경하는 프로그래밍 방식을 제공하여 ITextProvider 보완합니다. 또한 Microsoft Active Accessibility와 같은 레거시 기술을 기반으로 하는 애플리케이션을 포함하여 보조 기술 클라이언트 애플리케이션과의 더 큰 호환성을 제공합니다. 두 컨트롤 패턴이 모두 구현되면 TextChanged 이벤트(UIA_Text_TextChangedEventId) 및 AutomationPropertyChanged 이벤트(UIA_AutomationPropertyChangedEventId)는 Value 속성(UIA_ValueValuePropertyId)과 동일합니다. 두 이벤트 모두 지원되어야 합니다.
- Text 컨트롤 패턴은 하나의 텍스트 스트림과 컨트롤당 하나의 뷰포트만 지원합니다. 응용 프로그램이 창에서 문서의 여러 보기를 제공하는 경우 각 보기(컨트롤)는 ITextProvider독립적으로지원해야 합니다.
- ITextProvider::GetSelection 메서드는 현재 선택한 텍스트를 나타내는 단일 텍스트 범위를 반환할 수 있습니다. 컨트롤이 인접하지 않은 여러 텍스트 범위의 선택을 지원하는 경우 GetSelection 메서드는 선택한 각 텍스트 범위에 대해 하나의 ITextRangeProvider 인터페이스가 포함된 배열을 반환해야 합니다.
- 텍스트 컨트롤 패턴은 삽입 지점을 퇴행(빈) 텍스트 범위로 나타냅니다. ITextProvider::GetSelection 메서드는 삽입 지점이 있고 텍스트가 선택되지 않은 경우 퇴행성 텍스트 범위를 반환해야 합니다. 자세한 내용은 System Caret 상호 운용성을 참조하세요.
- ITextProvider::GetVisibleRanges 메서드는 인접한 텍스트 범위가 뷰포트에 표시되는 경우 단일 텍스트 범위를 반환하거나 부분적으로 표시되는 여러 텍스트 줄을 나타내는 연결되지 않은 텍스트 범위 배열을 반환할 수 있습니다.
- ITextProvider::RangeFromChild 메서드는 자식 요소에 텍스트가 없는 경우 퇴행성 범위를 반환해야 합니다. 포함된 개체에 텍스트가 포함될 수 있으므로 RangeFromChild 메서드는 항상 퇴행성 텍스트 범위를 반환하지 않을 수 있습니다. 자세한 내용은 UI 자동화에서 포함된 개체노출하는 방법을 참조하세요.
- ITextProvider::RangeFromPoint 메서드는 지정된 화면 좌표를 사용하여 문서 영역에서 적중 테스트를 수행합니다. 결과 텍스트 범위는 지정된 화면 좌표에서 위치를 클릭하면 나타나는 삽입 지점 또는 선택 영역과 일치해야 합니다. 예를 들어 이미지가 지정된 화면 좌표에 있는 경우 결과 텍스트 범위는 ITextProvider::RangeFromChild 메서드가 이미지에 대해 획득하는 텍스트 범위와 동일해야 합니다. 마찬가지로 클라이언트 애플리케이션이 시스템 캐리트(삽입 지점)의 중심에 있는 위치에 대한 텍스트 범위를 요청하는 경우 결과 텍스트 범위는 시스템 캐리트 위치와 동일해야 합니다.
- ITextProvider::D ocumentRange 속성은 항상 해당 ITextProvider 구현에서 지원하는 모든 텍스트를 포함하는 텍스트 범위를 제공해야 합니다.
- 변경 내용이 뷰포트에 표시되지 않더라도 텍스트 변경이 발생한 후에는 UIA_Text_TextChangedEventId 이벤트가 발생해야 합니다. 예를 들어 공급자는 사용자가 선택한 텍스트 위에 정확히 동일한 텍스트를 붙여넣어도 이벤트를 발생시켜야 합니다.
- 텍스트 선택 영역이 변경되거나 삽입 지점(caret)이 텍스트 간에 이동할 때마다 UIA_Text_TextSelectionChangedEventId 발생시켜야 합니다.
TextRange 컨트롤 패턴을 구현하는 경우 다음 지침 및 규칙을 확인합니다.
- TextRange 컨트롤 패턴의 모든 메서드는 텍스트의 표시 상태에 관계없이 텍스트 작업을 수행해야 합니다. 텍스트 범위의 표시 유형은 항상 IsHidden 텍스트 특성(UIA_IsHiddenAttributeId)을 쿼리하여 확인할 수 있습니다.
- 가능한 경우 공급자는 삭제, 삽입 및 이동과 같은 텍스트 변경 내용이 연결된 텍스트 범위 개체(ITextRangeProvider 인터페이스 인스턴스)에 반영되도록 하고 UIA_Text_TextChangedEventId 이벤트를 발생시켜야 합니다. 클라이언트는 이벤트를 힌트로 사용하여 컨트롤의 텍스트에 대한 편집 변경 내용을 확인할 수 있습니다.
- ITextRangeProvider::Compare, CompareEndpoints및 MoveEndpointByRange 메서드에서 사용하는 모든 텍스트 범위 개체는 동일한 Text 컨트롤 패턴 구현의 피어여야 합니다.
- 필수는 아니지만 ITextRangeProvider::CompareEndpoints 메서드에서 검색한 pRetVal 값은 두 엔드포인트 사이의 거리를 문자(TextUnit_Character)로 나타낼 수 있습니다. 그러나 클라이언트 애플리케이션은 pRetVal 긍정 또는 음수 값을 초과하는 정확도에 의존해서는 안 됩니다.
- ITextRangeProvider::ExpandToEnclosingUnit, move및 MoveEndpointByUnit 메서드는 지정된 텍스트 단위를 신중하게 고려해야 합니다. 자세한 내용은 텍스트 단위로 TextRange 조작을 참조하세요.
- ITextRangeProvider::Select, AddToSelection및 RemoveFromSelection 메서드와 관련된 구현 요구 사항은 텍스트 범위에서 텍스트 선택을 참조하세요.
- ITextRangeProvider::FindText 및 FindAttribute 메서드는 일치하는 단일 텍스트 문자열 또는 텍스트 특성을 앞뒤로 검색합니다. 일치하는 항목이 없으면 NULL 반환해야 합니다.
- ITextRangeProvider::GetAttributeValue 메서드는 UiaGetReservedMixedAttributeValue 또는 UiaGetReservedNotSupportedValue 함수에서 가져온 주소를 반환해야 합니다. TextRange 컨트롤 패턴 사양에서는 새 텍스트 특성 식별자를 추가하거나 기존 특성이 정의되는 방식을 변경할 수 없습니다.
- 가능하면 ITextRangeProvider::GetBoundingRectangles 메서드는 텍스트 범위에서 완전히 또는 부분적으로 표시되는 각 텍스트 줄에 대해 하나의 경계 사각형이 포함된 배열을 반환해야 합니다. 이렇게 할 수 없는 경우 공급자는 완전히 보이는 선의 경계 사각형만 포함된 배열을 반환할 수 있습니다. 그러나 이렇게 하면 화면에 텍스트가 표시되는 방식을 정확하게 설명하는 클라이언트 애플리케이션의 기능이 제한됩니다.
- ITextRangeProvider::GetChildren 메서드는 텍스트 범위에 포함된 모든 자식 요소를 반환해야 하지만 자식 요소의 자식을 반환할 필요는 없습니다. 예를 들어 텍스트 범위에 여러 자식 셀이 있는 표가 포함된 경우 GetChildren 메서드는 셀 요소가 아닌 테이블 요소만 반환할 수 있습니다. 성능 또는 아키텍처상의 이유로 공급자가 자동화 트리의 문서에 호스트되는 모든 포함된 개체를 노출하지 못할 수 있습니다. 이 경우 공급자는 최소한 GetChildren 메서드를 통해 자식 개체의 열거를 지원해야 하며, 옵션으로 가상화 해제 지원을 위한 VirtualizedItem 컨트롤 패턴을 지원해야 합니다.
- ITextRangeProvider::GetEnclosingElement 메서드는 일반적으로 텍스트 범위를 제공하는 텍스트 공급자를 반환합니다. 그러나 텍스트 공급자가 테이블 또는 하이퍼링크와 같은 자식 개체를 지원하는 경우 바깥쪽 요소는 텍스트 공급자의 하위 요소가 될 수 있습니다. GetEnclosingElement 반환된 요소는 지정된 텍스트 범위와 가장 가까운 요소여야 합니다. 예를 들어 텍스트 범위가 표의 셀에 있는 경우 GetEnclosingElement 테이블 요소 대신 포함하는 셀을 반환해야 합니다.
- ITextRangeProvider::GetText 메서드는 범위의 일반 텍스트를 반환해야 합니다. 자세한 내용은 텍스트 범위에서 텍스트 획득을 참조하세요.
- ITextRangeProvider::ScrollIntoView 호출하면 alignToTop 매개 변수에 지정된 대로 텍스트 컨트롤의 뷰포트에 있는 텍스트를 정렬해야 합니다. 가로 맞춤의 측면에서는 요구 사항이 없지만 텍스트 범위는 가로 및 세로로 모두 표시되어야 합니다. alignToTop 매개 변수를 평가할 때 공급자는 텍스트 컨트롤의 방향과 텍스트의 흐름 방향을 고려해야 합니다. 예를 들어 alignToTop 오른쪽에서 왼쪽으로 흐르는 텍스트를 포함하는 세로 방향 텍스트 컨트롤에 대해 TRUE 경우 공급자는 텍스트 범위를 뷰포트의 오른쪽에 맞춰야 합니다.
- TextUnit_Line문서를 이동할 때 텍스트 범위가 포함된 표에 들어가면 셀의 각 텍스트 줄을 한 줄로 처리해야 합니다.
ITextProvider 필요한 멤버
ITextProvider 인터페이스를 구현하려면 다음 속성과 메서드가 필요합니다.
필수 멤버 | 멤버 형식 | 노트 |
---|---|---|
documentRange | 재산 | 없음 |
supportedTextSelection | 재산 | 없음 |
getSelection | 메서드 | 없음 |
GetVisibleRanges | 메서드 | 없음 |
rangeFromChild | 메서드 | 없음 |
RangeFromPoint | 메서드 | 없음 |
UIA_Text_TextChangedEventId | 이벤트 | 없음 |
UIA_Text_TextSelectionChangedEventId | 이벤트 | 없음 |
ITextProvider2 인터페이스를 구현하려면 다음과 같은 추가 속성과 메서드가 필요합니다.
필수 멤버 | 멤버 형식 | 노트 |
---|---|---|
GetCaretRange | 메서드 | 없음 |
RangeFromAnnotation | 메서드 | 없음 |
ITextRangeProvider 필요한 멤버
ITextRangeProvider 인터페이스를 구현하려면 다음 속성과 메서드가 필요합니다.
필수 멤버 | 멤버 형식 | 노트 |
---|---|---|
AddToSelection | 메서드 | 없음 |
복제 | 메서드 | 없음 |
비교 | 메서드 | 없음 |
CompareEndpoints | 메서드 | 없음 |
ExpandToEnclosingUnit | 메서드 | 없음 |
FindAttribute | 메서드 | 없음 |
FindText | 메서드 | 없음 |
GetAttributeValue | 메서드 | 없음 |
getBoundingRectangles | 메서드 | 없음 |
GetChildren | 메서드 | 없음 |
GetEnclosingElement | 메서드 | 없음 |
GetText | 메서드 | 없음 |
이동 | 메서드 | 없음 |
MoveEndpointByUnit | 메서드 | 없음 |
moveEndpointByRange | 메서드 | 없음 |
선택 | 메서드 | 없음 |
scrollIntoView | 메서드 | 없음 |
ITextRangeProvider2 인터페이스를 구현하려면 다음과 같은 추가 속성과 메서드가 필요합니다.
필수 멤버 | 멤버 형식 | 노트 |
---|---|---|
showContextMenu | 메서드 | "ShowContextMenu 구현" 섹션을 참조하세요. |
TextRange 컨트롤 패턴에는 연결된 이벤트가 없습니다.
텍스트 범위 지원
이 섹션에서는 공급자가 TextRange 컨트롤 패턴을 지원하기 위해 ITextRangeProvider 및 ITextRangeProvider2 인터페이스의 다양한 메서드를 구현하는 방법을 설명합니다.
텍스트 단위로 텍스트 범위 조작
ITextRangeProvider 인터페이스는 텍스트 기반 컨트롤에서 텍스트 범위를 조작하고 탐색하는 몇 가지 메서드를 제공합니다. ITextRangeProvider::Move, MoveEndpointByUnit및 ExpandToEnclosingUnit 메서드는 텍스트 범위 또는 해당 엔드포인트 중 하나를 문자, 단어, 단락 등의 지정된 텍스트 단위로 이동합니다. 자세한 내용은 UI 자동화 텍스트 단위참조하세요.
이름에도 불구하고 ITextRangeProvider::ExpandToEnclosingUnit 메서드가 반드시 텍스트 범위를 확장하지는 않습니다. 대신 범위가 지정된 텍스트 단위를 포함하도록 엔드포인트를 이동하여 텍스트 범위를 "정규화"합니다. 범위가 지정된 단위보다 작으면 확장되거나 지정된 단위보다 길면 줄입니다. ExpandToEnclosingUnit 메서드는 항상 일관된 방식으로 텍스트 범위를 정규화하는 것이 중요합니다. 그렇지 않으면 텍스트 단위에 의한 텍스트 범위 조작의 다른 측면을 예측할 수 없습니다. 다음 다이어그램에서는 expandToEnclosingUnit 범위의 엔드포인트를 이동하여 텍스트 범위를 정규화하는 방법을 보여 줍니다.
expandtoenclosingunit다이어그램
텍스트 범위가 텍스트 단위의 시작 부분에서 시작되고 다음 텍스트 단위 경계의 시작 또는 그 이전에 끝나는 경우 끝 끝점은 다음 텍스트 단위 경계로 이동됩니다(이전 다이어그램의 1과 2 참조).
텍스트 범위가 텍스트 단위의 시작 부분에서 시작되고 다음 단위 경계에서 또는 그 이후에 끝나는 경우 끝 엔드포인트는 시작 엔드포인트 이후의 다음 단위 경계로 유지되거나 뒤로 이동합니다(이전 그림의 3과 4 참조). 시작 엔드포인트와 끝 엔드포인트 사이에 둘 이상의 텍스트 단위 경계가 있는 경우 끝 엔드포인트는 시작 엔드포인트 뒤의 다음 단위 경계로 뒤로 이동하여 텍스트 단위 길이가 1개인 텍스트 범위를 만듭니다.
텍스트 범위가 텍스트 단위의 중간에 시작되면 시작 엔드포인트가 텍스트 단위의 시작 부분으로 뒤로 이동하고 필요에 따라 끝 엔드포인트가 시작 엔드포인트 뒤의 다음 단위 경계로 앞으로 또는 뒤로 이동됩니다(이전 다이어그램의 5~8 참조).
ITextRangeProvider::Move 메서드가 호출되면 공급자는 ExpandToEnclosingUnit 메서드와 동일한 정규화 논리를 사용하여 지정된 텍스트 단위별로 텍스트 범위를 정규화합니다. 그런 다음 공급자는 지정된 수의 텍스트 단위만큼 범위를 뒤로 또는 앞으로 이동합니다. 범위를 이동할 때 공급자는 텍스트에 포함된 개체의 경계를 무시해야 합니다. 그러나 단위 경계 자체는 포함된 개체의 존재에 의해 영향을 받을 수 있습니다. 다음 다이어그램에서는 Move 메서드가 포함된 개체 및 텍스트 단위 경계에서 텍스트 범위를 단위 단위로 이동하는 방법을 보여 줍니다.
이동 메서드가 개체 및 텍스트 단위 경계를 넘어 범위 엔드포인트를 이동하는 방법을 보여 주는
ITextRangeProvider::MoveEndpointByUnit 메서드는 다음 그림과 같이 지정된 텍스트 단위로 엔드포인트 중 하나를 앞뒤로 이동합니다.
moveendpointbyunit이 범위다이어그램
ITextRangeProvider::MoveEndpointByRange 메서드를 사용하면 클라이언트 애플리케이션이 텍스트 범위의 엔드포인트 하나를 두 번째 텍스트 범위의 지정된 엔드포인트와 동일한 위치로 설정할 수 있습니다.
텍스트 범위에서 텍스트 선택
ITextRangeProvider 인터페이스에는 텍스트 기반 컨트롤에서 텍스트 선택을 제어하는 몇 가지 메서드가 포함되어 있습니다.
ITextRangeProvider::select 메서드는 텍스트 범위에 해당하는 텍스트를 선택하고 텍스트 컨트롤에서 이전 선택 영역(있는 경우)을 제거해야 합니다. 퇴행성 텍스트 범위에서 선택이 호출되면 공급자는 텍스트를 선택하지 않고 삽입 지점을 텍스트 범위의 위치로 이동해야 합니다.
컨트롤이 여러 개의 연결되지 않은 텍스트 범위 선택을 지원하는 경우 ITextRangeProvider::AddToSelection 및 removeFromSelection메서드는 선택한 텍스트 범위의 컬렉션에 텍스트 범위를 추가하고 제거합니다. 컨트롤에서 선택한 텍스트 범위만 한 번에 하나만 지원하지만 선택 작업으로 인해 여러 개의 서로 다른 텍스트 범위가 선택되는 경우 공급자는 E_INVALIDOPERATION 오류를 반환하거나 현재 선택 영역을 확장하거나 잘라내야 합니다. ITextProvider::SupportedTextSelection 속성은 컨트롤이 단일 또는 여러 텍스트 범위의 선택을 지원하는지 또는 전혀 선택하지 않는지를 나타내야 합니다.
텍스트 기반 컨트롤이 텍스트 삽입을 지원하는 경우 ITextRangeProvider::AddToSelection 호출하거나 컨트롤의 퇴행 텍스트 범위에서 RemoveFromSelection삽입 지점을 이동해야 하지만 텍스트를 선택해서는 안 됩니다.
텍스트 범위에서 텍스트 획득
ITextRangeProvider::GetText 메서드는 텍스트 범위의 일반 텍스트를 반환해야 합니다. 일반 텍스트에는 캐리지 리턴 및 LRM(유니코드 왼쪽에서 오른쪽 표시)과 같이 원본 텍스트에 있는 모든 컨트롤 문자가 포함되어야 합니다. 일반 텍스트에는 원본 텍스트에 있을 수 있는 HTML과 같은 태그 태그가 포함되어서는 안 됩니다. 또한 원본 텍스트의 모든 이스케이프 코드는 해당하는 일반 텍스트로 변환되어야 합니다. 예를 들어 " " 는 단순 공백 문자로 변환되어야 합니다.
포함된 개체가 텍스트 범위에 걸쳐 있는 경우 일반 텍스트는 개체의 내부 텍스트를 포함해야 하지만 설명이 포함된 내부 텍스트와 일치하지 않을 수 있으므로 대체 텍스트(포함된 개체의 이름 속성)는 포함하지 않아야 합니다. 자세한 내용은 UI 자동화에서 포함된 개체노출하는 방법을 참조하세요.
ShowContextMenu 구현
ITextRangeProvider2::ShowContextMenu 항상 범위의 시작점에 상황에 맞는 메뉴를 표시해야 합니다. 이는 사용자가 범위의 시작 부분에 삽입 지점이 있는 상황에 맞는 메뉴 키 또는 Shift + F10을 누른 경우 발생하는 작업과 동일해야 합니다.
상황에 맞는 메뉴를 표시하면 일반적으로 삽입 지점이 지정된 위치로 이동하게 되는 경우 프로그래밍 방식으로 UI 자동화 지원을 위해 ShowContextMenu 호출해야 합니다.
시스템 캐럿과의 상호 운용성
삽입 지점을 올바르게 지원하는 것은 UI 자동화를 기반으로 하지 않는 애플리케이션을 포함하여 많은 클라이언트 애플리케이션에 중요합니다. 텍스트 컨트롤 패턴에서 삽입 지점은 시스템 캐럿의 위치에 있는 퇴행성(빈) 텍스트 범위로 표시됩니다. 삽입 지점이 이동하면 컨트롤이 TextSelectionChanged 이벤트(UIA_Text_TextSelectionChangedEventId)를 발생시켜야 합니다. 일부 클라이언트 애플리케이션은 삽입 지점의 위치를 모니터링하고 텍스트 선택을 추적하기 위해 이 이벤트에 의존합니다.
컨트롤에 선택한 텍스트가 포함된 경우 Text 컨트롤 패턴의 현재 디자인은 삽입 지점의 위치를 특정 텍스트 범위와 직접 연결하는 방법을 제공하지 않습니다. 공급자는 텍스트 선택을 추적하고 삽입 지점의 위치를 적절하게 설정해야 합니다. 일반적으로 Shift 또는 Ctrl 키를 누른 상태에서 삽입 지점을 이동하거나 둘 다 선택하여 텍스트를 선택하기 때문에 공급자는 선택 항목이 변경 될 때마다 이러한 키의 상태를 확인하여 텍스트 선택을 추적할 수 있습니다.
접근성 프레임워크는 시스템 캐리트에 대한 기본 제공 지원을 제공하지만 사용자 지정 캐리트에 대해서는 지원하지 않으므로 텍스트 기반 컨트롤은 가능하면 시스템 케어를 사용해야 합니다. 사용자 지정 캐럿을 사용하는 컨트롤은 사용자 지정 캐럿과 동일한 차원을 가진 시스템 캐럿을 만들고, 시스템 캐럿을 사용자 지정 캐럿과 컨트롤의 UI에 있는 동일한 위치, 즉 삽입 지점에 배치하여 캐럿에 액세스할 수 있도록 할 수 있습니다. 또는 사용자 지정 캐럿을 사용하는 컨트롤은 사용자 지정 캐럿에 대한 접근성 정보를 직접 제공하기 위해 OBJID_CARET Microsoft Active Accessibility 공급자를 구현할 수 있습니다.
시스템 캐럿에 대한 자세한 내용은 Carets를 참조하세요.
컨트롤이 시스템 캐리트의 위치를 제대로 노출하는지 테스트하려면 검사 및 액세스 가능한 Event Watcher 도구를 사용합니다.
시스템 캐리트 비트맵의 가운데 화면 좌표는 항상 삽입 지점의 위치와 일치해야 합니다. 이렇게 하면 클라이언트는 ITextProvider::RangeFromPoint호출에서 캐럿 화면 좌표를 사용하여 삽입 지점의 위치를 정확하게 나타내는 텍스트 범위를 검색할 수 있습니다.
관련 항목
-
텍스트 콘텐츠 대한 UI 자동화 지원