Freigeben über


Text- und TextRange-Steuerelementmuster

Beschreibt Richtlinien und Konventionen für die Implementierung von ITextProvider, ITextProvider2und ITextRangeProvider-, einschließlich Informationen zu Eigenschaften und Methoden. Mit dem Text- Steuerelementmusters können Anwendungen und Steuerelemente ein einfaches Textobjektmodell verfügbar machen, sodass Clients Textinhalte, Textattribute und eingebettete Objekte aus textbasierten Steuerelementen abrufen können.

Um das Text- Steuerelementmuster zu unterstützen, implementieren Steuerelemente die ITextProvider- und ITextProvider2--Schnittstellen. Steuerelementtypen, die das Text- Steuerelementmuster unterstützen sollen, umfassen das Steuerelementmuster Bearbeiten und Dokument- Steuerelementtypen sowie alle anderen Steuerelementtypen, mit denen der Benutzer Text eingeben oder schreibgeschützten Text auswählen kann.

Das Text- Steuerelementmusters kann mit anderen Steuerelementmustern der Microsoft-Benutzeroberflächenautomatisierung verwendet werden, um verschiedene Typen eingebetteter Objekte im Text zu unterstützen, einschließlich Tabellen, Links und Befehlsschaltflächen.

Die schnittstellen ITextProvider und ITextProvider 2 enthalten eine Reihe von Methoden zum Abrufen von Textbereichen. Ein Textbereich ist ein Objekt, das eine zusammenhängende Textspanne (oder mehrere, nicht zusammenhängende Textspannen) in einem Textcontainer darstellt. Eine ITextProvider Methode erhält einen Textbereich, der das gesamte Dokument darstellt, während andere Textbereiche abrufen, die einen Teil des Dokuments darstellen, z. B. den markierten Text, den sichtbaren Text oder ein im Text eingebettetes Objekt.

Ein Textbereichsobjekt wird durch das TextRange Steuerelementmuster dargestellt, das über die ITextRangeProvider Schnittstelle implementiert wird. Das TextRange Steuerelementmusters stellt Methoden und Eigenschaften bereit, die verwendet werden, um Informationen zum Text im Bereich verfügbar zu machen, die Endpunkte des Bereichs zu verschieben, Text auszuwählen oder zu deaktivieren, in den Bereich zu scrollen usw.

Weitere Informationen zu den Text und TextRange Steuerelementmustern finden Sie unter Unterstützung der Benutzeroberflächenautomatisierung für Textinhalte.

Ab Windows 8.1 können Anbieter die ITextRangeProvider2 Schnittstelle implementieren. Dies ermöglicht das Aufrufen von Kontextmenüs, die einem Textbereich zugeordnet sind. Dies unterstützt Szenarien wie die Text-Autokorrektur oder die Auswahl von IME-Kandidaten (Input Method Editor).

Dieses Thema enthält die folgenden Abschnitte.

Implementierungsrichtlinien und -konventionen

Beachten Sie bei der Implementierung des Text- Steuerelementmusters die folgenden Richtlinien und Konventionen:

  • Jedes Steuerelement, das den Zugriff auf Text ermöglicht (z. B. das Eingeben von Text oder das Auswählen von schreibgeschütztem Text), sollte das Text Steuerelementmusters unterstützen.
  • Das Text- Steuerelementmusters kann mit jedem UI-Element verwendet werden, das Text darstellt, sogar eine statische Beschriftung in einem Standardschaltflächensteuerelement. Es ist jedoch nicht für statische Textsteuerelemente erforderlich, die nicht ausgewählt werden können oder keine Einfügemarke haben.
  • Um sicherzustellen, dass Text vollständig zugänglich ist, sollten Steuerelemente, die ITextProvider- implementieren, auch die IValueProvider--Schnittstelle unterstützen. IValueProvider ergänzt ITextProvider durch eine programmgesteuerte Möglichkeit zum Ändern des Texts. Außerdem bietet sie eine bessere Kompatibilität mit Hilfstechnologieclientanwendungen, einschließlich der Anwendungen, die auf älteren Technologien wie Microsoft Active Accessibility basieren. Wenn beide Steuerelementmuster implementiert werden, sind das TextChanged -Ereignis (UIA_Text_TextChangedEventId) und AutomationPropertyChanged -Ereignis (UIA_AutomationPropertyChangedEventId) für die Value-Eigenschaft (UIA_ValueValuePropertyId) gleichwertig. Beide Ereignisse müssen unterstützt werden.
  • Das Text- Steuerelementmusters unterstützt nur einen Textstrom und einen Viewport pro Steuerelement. Wenn die Anwendung mehrere Ansichten von Dokumenten in Bereichen bietet, sollte jede Ansicht (Steuerelement) ITextProvider- unabhängig unterstützen.
  • Die ITextProvider::GetSelection--Methode gibt möglicherweise einen einzelnen Textbereich zurück, der den aktuell ausgewählten Text darstellt. Wenn ein Steuerelement die Auswahl mehrerer nicht zusammenhängender Textbereiche unterstützt, sollte die GetSelection--Methode ein Array zurückgeben, das eine ITextRangeProvider Schnittstelle für jeden ausgewählten Textbereich enthält.
  • Das Text Steuerelementmusters stellt die Einfügemarke als entgenerten (leeren) Textbereich dar. Die ITextProvider::GetSelection--Methode sollte einen degenerieren Textbereich zurückgeben, wenn die Einfügemarke vorhanden ist und kein Text markiert ist. Weitere Informationen finden Sie unter Interoperabilität mit dem System Caret-.
  • Die ITextProvider::GetVisibleRanges Methode kann einen einzelnen Textbereich zurückgeben, wenn ein zusammenhängender Textbereich im Viewport sichtbar ist, oder es kann ein Array von nicht zusammenhängenden Textbereichen zurückgeben, die mehrere teilweise sichtbare Textzeilen darstellen.
  • Die ITextProvider::RangeFromChild Methode sollte einen degenerate Bereich zurückgeben, wenn das untergeordnete Element keinen Text enthält. Da ein eingebettetes Objekt Text enthalten kann, gibt die RangeFromChild--Methode möglicherweise nicht immer einen entgenerten Textbereich zurück. Weitere Informationen finden Sie unter Wie die Benutzeroberflächenautomatisierung eingebettete Objekteverfügbar macht.
  • Die ITextProvider::RangeFromPoint--Methode führt Treffertests im Dokumentbereich mithilfe der angegebenen Bildschirmkoordinaten durch. Der resultierende Textbereich sollte mit der Einfügemarke oder Auswahl konsistent sein, die sich aus dem Klicken auf die Position an den angegebenen Bildschirmkoordinaten ergeben würde. Wenn sich beispielsweise ein Bild in den angegebenen Bildschirmkoordinaten befindet, sollte der resultierende Textbereich mit dem Textbereich identisch sein, den die ITextProvider::RangeFromChild-Methode für das Bild abrufen würde. Wenn eine Clientanwendung einen Textbereich für die Position in der Mitte des System caret (der Einfügemarke) anfordert, sollte der resultierende Textbereich mit der System caretposition identisch sein.
  • Die ITextProvider::D ocumentRange-Eigenschaft sollte immer einen Textbereich bereitstellen, der den gesamten Text enthält, der von der entsprechenden ITextProvider- Implementierung unterstützt wird.
  • Das UIA_Text_TextChangedEventId-Ereignis muss ausgelöst werden, nachdem eine Textänderung erfolgt, auch wenn die Änderung im Viewport nicht sichtbar ist. Beispielsweise sollte der Anbieter das Ereignis auslösen, auch wenn der Benutzer den exakten Text über dem markierten Text einfüge.
  • Die UIA_Text_TextSelectionChangedEventId muss ausgelöst werden, wenn sich die Textauswahl ändert oder wenn die Einfügemarke (Caret) zwischen dem Text verschoben wird.

Beachten Sie bei der Implementierung des TextRange Steuerelementmusters die folgenden Richtlinien und Konventionen:

  • Alle Methoden des TextRange Steuerelementmusters sollten Textvorgänge unabhängig vom Sichtbarkeitszustand des Texts ausführen. Die Sichtbarkeit eines Textbereichs kann immer durch Abfragen des IsHidden Textattributes (UIA_IsHiddenAttributeId) bestimmt werden.
  • Wenn möglich, sollte ein Anbieter sicherstellen, dass textänderungen, z. B. Löschungen, Einfügungen und Verschiebungen, in den zugeordneten Textbereichsobjekten (Instanzen von ITextRangeProvider Schnittstelle) widergespiegelt werden und ein UIA_Text_TextChangedEventId Ereignis auslösen. Kunden können das Ereignis als Hinweis verwenden, um redaktionelle Änderungen zu bestätigen, die am Text eines Steuerelements vorgenommen wurden.
  • Alle textbereichsobjekte, die vom ITextRangeProvider::Compare, CompareEndpointsverwendet werden, und MoveEndpointByRange Methoden müssen Peers derselben Text Steuerelementmusterimplementierung sein.
  • Obwohl nicht erforderlich, kann der pRetVal Wert, der vom ITextRangeProvider::CompareEndpoints-Methode abgerufen wurde, den AbstandTextUnit_Characterzwischen den beiden Endpunkten angeben. Clientanwendungen sollten jedoch nicht von der Genauigkeit pRetVal über ihren positiven oder negativen Wert hinausgehen.
  • Die ITextRangeProvider::ExpandToEnclosingUnit, Moveund MoveEndpointByUnit Methoden erfordern sorgfältige Berücksichtigung der angegebenen Texteinheit. Weitere Informationen finden Sie unter Bearbeiten einer TextRange nach Texteinheit.
  • Implementierungsanforderungen im Zusammenhang mit den methoden ITextRangeProvider::Select, AddToSelectionund RemoveFromSelection methoden finden Sie unter Auswählen von Text in einem Textbereich.
  • Die ITextRangeProvider::FindText und FindAttribute Methoden suchen vorwärts oder rückwärts nach einer einzelnen übereinstimmenden Textzeichenfolge oder textattribut. Sie sollten NULL- zurückgeben, wenn keine Übereinstimmung gefunden wird.
  • Die ITextRangeProvider::GetAttributeValue-Methode muss die Adresse zurückgeben, die aus dem UiaGetReservedMixedAttributeValue oder UiaGetReservedNotSupportedValue Funktion zurückgegeben wird, wenn das zugeordnete Attribut in dem Bereich variiert oder das Attribut vom Textsteuerelement nicht unterstützt wird. Die TextRange Steuerelementmusterspezifikation lässt das Hinzufügen neuer Textattributebezeichner oder das Ändern der Definition der vorhandenen Attribute nicht zu.
  • Wenn möglich, sollte die ITextRangeProvider::GetBoundingRectangles Methode ein Array zurückgeben, das ein umgebendes Rechteck für jede vollständig oder teilweise sichtbare Textzeile in einem Textbereich enthält. Wenn dies nicht möglich ist, kann der Anbieter ein Array zurückgeben, das die umgebenden Rechtecke nur vollständig sichtbarer Linien enthält. Dies beschränkt jedoch die Fähigkeit einer Clientanwendung, genau zu beschreiben, wie der Text auf dem Bildschirm dargestellt wird.
  • Die ITextRangeProvider::GetChildren-Methode sollte alle untergeordneten Elemente zurückgeben, die in einem Textbereich eingebettet sind, aber keine untergeordneten Elemente der untergeordneten Elemente zurückgeben müssen. Wenn beispielsweise ein Textbereich eine Tabelle mit einer Reihe untergeordneter Zellen enthält, gibt die GetChildren-Methode möglicherweise nur das Tabellenelement und nicht die Zellelemente zurück. Aus Leistungs- oder Architekturgründen kann ein Anbieter möglicherweise nicht alle eingebetteten Objekte verfügbar machen, die in einem Dokument in der Automatisierungsstruktur gehostet werden. In diesem Fall sollte der Anbieter mindestens die Aufzählung untergeordneter Objekte über die GetChildren-Methode unterstützen und als Option das VirtualizedItem- Steuerelementmuster zur Devirtualisierung unterstützen.
  • Die ITextRangeProvider::GetEnclosingElement Methode gibt in der Regel den Textanbieter zurück, der den Textbereich bereitstellt. Wenn der Textanbieter jedoch untergeordnete Objekte wie Tabellen oder Hyperlinks unterstützt, könnte das eingeschlossene Element ein nachfolger des Textanbieters sein. Das von GetEnclosingElement zurückgegebene Element sollte das Element sein, das dem angegebenen Textbereich am nächsten kommt. Wenn sich der Textbereich beispielsweise in einer Zelle einer Tabelle befindet, sollte GetEnclosingElement- die enthaltende Zelle anstelle des Tabellenelements zurückgeben.
  • Die ITextRangeProvider::GetText-Methode sollte den Nur-Text im Bereich zurückgeben. Weitere Informationen finden Sie unter Abrufen von Text aus einem Textbereich.
  • Das Aufrufen ITextRangeProvider::ScrollIntoView- sollte den Text im Viewport des Textsteuerelements ausrichten, wie durch den Parameter alignToTop angegeben. Obwohl es keine Anforderung hinsichtlich der horizontalen Ausrichtung gibt, sollte der Textbereich sowohl horizontal als auch vertikal sichtbar sein. Beim Auswerten des alignToTop--Parameters muss ein Anbieter die Ausrichtung des Textsteuerelements und die Flussrichtung des Texts berücksichtigen. Wenn z. B. AlignToTop-TRUE- für ein vertikal ausgerichtetes Textsteuerelement ist, das Text enthält, der von rechts nach links fließt, sollte der Anbieter den Textbereich an der rechten Seite des Viewports ausrichten.
  • Wenn der Textbereich eine eingebettete Tabelle eingibt, sollte jede Textzeile in einer Zelle als Zeile behandelt werden, wenn sie durch ein Dokument durch TextUnit_Linenavigieren.

Erforderliche Elemente für ITextProvider-

Die folgenden Eigenschaften und Methoden sind für die Implementierung der ITextProvider Schnittstelle erforderlich.

Erforderliche Mitglieder Elementtyp Notizen
DocumentRange- Eigentum Nichts
SupportedTextSelection- Eigentum Nichts
GetSelection- Methode Nichts
GetVisibleRanges- Methode Nichts
RangeFromChild- Methode Nichts
RangeFromPoint- Methode Nichts
UIA_Text_TextChangedEventId Ereignis Nichts
UIA_Text_TextSelectionChangedEventId Ereignis Nichts

 

Die folgenden zusätzlichen Eigenschaften und Methoden sind für die Implementierung der ITextProvider2 Schnittstelle erforderlich.

Erforderliche Mitglieder Elementtyp Notizen
GetCaretRange- Methode Nichts
RangeFromAnnotation- Methode Nichts

 

Erforderliche Elemente für ITextRangeProvider-

Die folgenden Eigenschaften und Methoden sind für die Implementierung der ITextRangeProvider Schnittstelle erforderlich.

Erforderliche Mitglieder Elementtyp Notizen
AddToSelection- Methode Nichts
Klonen Methode Nichts
Vergleichen Methode Nichts
CompareEndpoints- Methode Nichts
ExpandToEnclosingUnit Methode Nichts
FindAttribute- Methode Nichts
FindText- Methode Nichts
GetAttributeValue- Methode Nichts
GetBoundingRectangles- Methode Nichts
GetChildren- Methode Nichts
GetEnclosingElement- Methode Nichts
GetText- Methode Nichts
Verschieben Methode Nichts
MoveEndpointByUnit- Methode Nichts
MoveEndpointByRange- Methode Nichts
auswählen Methode Nichts
ScrollIntoView- Methode Nichts

 

Die folgenden zusätzlichen Eigenschaften und Methoden sind für die Implementierung der ITextRangeProvider2 Schnittstelle erforderlich.

Erforderliche Mitglieder Elementtyp Notizen
ShowContextMenu- Methode Siehe Abschnitt "Implementieren von ShowContextMenu"

 

Das TextRange Steuerelementmusters weist keine zugehörigen Ereignisse auf.

Unterstützen von Textbereichen

In diesem Abschnitt wird beschrieben, wie ein Anbieter verschiedene Methoden des ITextRangeProvider und ITextRangeProvider2-schnittstellen implementieren soll, um das TextRange- Steuerelementmuster zu unterstützen.

Bearbeiten eines Textbereichs nach Texteinheit

Die ITextRangeProvider Schnittstelle bietet mehrere Methoden zum Bearbeiten und Navigieren in Textbereichen in einem textbasierten Steuerelement. Die ITextRangeProvider::Move, MoveEndpointByUnitund ExpandToEnclosingUnit Methoden verschieben einen Textbereich oder einen seiner Endpunkte durch die angegebene Texteinheit, z. B. Zeichen, Wort, Absatz usw. Weitere Informationen finden Sie unter Texteinheiten für die Benutzeroberflächenautomatisierung.

Trotz des Namens erweitert die ITextRangeProvider::ExpandToEnclosingUnit Methode nicht unbedingt einen Textbereich. Stattdessen wird ein Textbereich durch Verschieben der Endpunkte normalisiert, sodass der Bereich die angegebene Texteinheit umfasst. Der Bereich wird erweitert, wenn er kleiner als die angegebene Einheit ist oder gekürzt wird, wenn er länger als die angegebene Einheit ist. Es ist wichtig, dass die methode ExpandToEnclosingUnit Textbereiche immer einheitlich normalisiert; andernfalls wären andere Aspekte der Textbereichsmanipulation nach Texteinheit unvorhersehbar. Das folgende Diagramm zeigt, wie ExpandToEnclosingUnit einen Textbereich normalisiert, indem die Endpunkte des Bereichs verschoben werden.

Diagramm mit Endpunktpositionen des Textbereichs vor und nach einem Aufruf zum expandtoenclosingunit

Wenn der Textbereich am Anfang einer Texteinheit beginnt und am Anfang oder davor endet, wird der nächste Texteinheitsgrenzwert an die nächste Texteinheitsgrenze verschoben (siehe 1 und 2 im vorherigen Diagramm).

Wenn der Textbereich am Anfang einer Texteinheit beginnt und mit oder nach der nächsten Einheitengrenze endet, bleibt der Endpunkt nach dem Startendpunkt zurück oder wird nach dem Startendpunkt rückwärts verschoben (siehe 3 und 4 in der vorherigen Abbildung). Wenn mehr als eine Texteinheitsgrenze zwischen den Anfangs- und Endendpunkten besteht, wird der Endpunkt nach dem Startendpunkt zurück zur nächsten Einheitengrenze verschoben, was zu einem Textbereich führt, der eine Texteinheit in der Länge ist.

Wenn der Textbereich in einer Mitte der Texteinheit beginnt, wird der Startendpunkt nach hinten an den Anfang der Texteinheit verschoben, und der Endendpunkt wird nach Bedarf nach vorne oder hinten verschoben (siehe 5 bis 8 im vorherigen Diagramm).

Wenn die ITextRangeProvider::Move-Methode aufgerufen wird, normalisiert der Anbieter den Textbereich nach der angegebenen Texteinheit, wobei die gleiche Normalisierungslogik wie die ExpandToEnclosingUnit--Methode verwendet wird. Anschließend verschiebt der Anbieter den Bereich um die angegebene Anzahl von Texteinheiten nach hinten oder vorwärts. Beim Verschieben des Bereichs sollte der Anbieter die Grenzen aller eingebetteten Objekte im Text ignorieren. (Die Einheitsgrenze selbst kann jedoch durch das Vorhandensein eines eingebetteten Objekts beeinflusst werden). Das folgende Diagramm veranschaulicht, wie die Move-Methode einen Textbereich, eine Einheit nach Einheit, über eingebettete Objekte und Texteinheitsgrenzen verschiebt.

Diagramm, das zeigt, wie die Move-Methode Bereichsendpunkte über Objekt- und Texteinheitsgrenzen hinweg verschiebt,

Die ITextRangeProvider::MoveEndpointByUnit Methode verschiebt einen der Endpunkte nach vorne oder rückwärts durch angegebene Texteinheit, wie die folgende Abbildung zeigt.

Diagramm, das zeigt, wie moveendpointbyunit den Endpunkt eines Bereichs

Die ITextRangeProvider::MoveEndpointByRange-Methode ermöglicht es einer Clientanwendung, einen Endpunkt eines Textbereichs auf denselben Ort wie der angegebene Endpunkt eines zweiten Textbereichs festzulegen.

Markieren von Text in einem Textbereich

Die ITextRangeProvider Schnittstelle enthält mehrere Methoden zum Steuern der Textauswahl in einem textbasierten Steuerelement.

Die ITextRangeProvider::Select-Methode sollte den Text markieren, der einem Textbereich entspricht, und ggf. die vorherige Auswahl aus dem Textsteuerelement entfernen. Wenn Select für einen entgenerten Textbereich aufgerufen wird, sollte der Anbieter die Einfügemarke an die Position des Textbereichs verschieben, ohne Text auszuwählen.

Wenn ein Steuerelement die Auswahl mehrerer, nicht zusammenhängender Textbereiche unterstützt, fügen die ITextRangeProvider::AddToSelection- und RemoveFromSelection- Methoden Textbereiche hinzu, und entfernen Sie sie aus der Auflistung ausgewählter Textbereiche. Wenn das Steuerelement jeweils nur einen markierten Textbereich unterstützt, der Auswahlvorgang jedoch zur Auswahl mehrerer nicht zusammenhängender Textbereiche führen würde, sollte der Anbieter entweder einen E_INVALIDOPERATION Fehler zurückgeben oder die aktuelle Auswahl erweitern oder abschneiden. Die ITextProvider::SupportedTextSelection--Eigenschaft sollte angeben, ob ein Steuerelement die Auswahl einzelner oder mehrerer Textspannen oder gar keines unterstützt.

Wenn ein textbasiertes Steuerelement Texteinfügungen unterstützt, sollte durch Aufrufen von ITextRangeProvider::AddToSelection oder RemoveFromSelection- für einen entgenerten Textbereich im Steuerelement die Einfügemarke verschoben, aber kein Text markiert werden.

Abrufen von Text aus einem Textbereich

Die ITextRangeProvider::GetText-Methode sollte den Nur-Text eines Textbereichs zurückgeben. Der Nur-Text sollte alle Im Quelltext gefundenen Steuerzeichen enthalten, z. B. Wagenrücklauf und unicode-Zeichen von links nach rechts (LRM). Der Nur-Text sollte keine Markuptags wie HTML enthalten, die im Quelltext vorhanden sein können. Außerdem sollten alle Escapecodes im Quelltext in die Nur-Text-Entsprechungen konvertiert werden. Beispielsweise sollte " " in ein einfaches Leerzeichen konvertiert werden.

Wenn ein eingebettetes Objekt einen Textbereich umfasst, sollte der nur-Text den inneren Text des Objekts, aber nicht den alternativtext (die Namenseigenschaft des eingebetteten Objekts) enthalten, da er möglicherweise mit dem beschreibenden inneren Text inkonsistent ist. Weitere Informationen finden Sie unter Wie die Benutzeroberflächenautomatisierung eingebettete Objekteverfügbar macht.

Implementieren von ShowContextMenu

ITextRangeProvider2::ShowContextMenu sollte immer das Kontextmenü am Anfangspunkt des Bereichs anzeigen. Dies sollte dem entsprechen, was passiert, wenn der Benutzer die Kontextmenütaste oder UMSCHALT+F10 mit der Einfügemarke am Anfang des Bereichs gedrückt hat.

Wenn das Kontextmenü in der Regel dazu führen würde, dass die Einfügemarke an eine bestimmte Position verschoben wird, sollte dies auch zum programmgesteuerten Aufrufen von ShowContextMenu- für die Unterstützung der Benutzeroberflächenautomatisierung erfolgen.

Interoperabilität mit dem System Caret

Die ordnungsgemäße Unterstützung der Einfügemarke ist für viele Clientanwendungen wichtig, einschließlich derjenigen, die nicht auf der Benutzeroberflächenautomatisierung basieren. Im Text Steuerelementmusters wird die Einfügemarke durch einen entgenerten (leeren) Textbereich an der Position des System caret dargestellt. Wenn die Einfügemarke verschoben wird, sollte ein Steuerelement das TextSelectionChanged-ereignis (UIA_Text_TextSelectionChangedEventId) auslösen. Einige Clientanwendungen hängen von diesem Ereignis ab, um die Position der Einfügemarke zu überwachen und die Textauswahl nachzuverfolgen.

Wenn ein Steuerelement markierten Text enthält, bietet das aktuelle Design des Text Steuerelementmusters keine Möglichkeit, die Position der Einfügemarke direkt einem bestimmten Textbereich zuzuordnen. Der Anbieter muss die Textauswahl nachverfolgen und die Position der Einfügemarke entsprechend festlegen. Da das Auswählen von Text in der Regel erfolgt, indem die Einfügemarke beim Halten der UMSCHALT- oder STRG-TASTE oder beides verschoben wird, kann ein Anbieter die Textauswahl nachverfolgen, indem er den Status dieser Tasten überprüft, wenn sich die Auswahl ändert.

Da das Barrierefreiheitsframework integrierte Unterstützung für das System caret, aber nicht für ein benutzerdefiniertes Caret bereitstellt, sollten textbasierte Steuerelemente die System caret nach Möglichkeit verwenden. Steuerelemente, die ein benutzerdefiniertes Caret verwenden, können sicherstellen, dass auf das Caret zugegriffen werden kann, indem ein System caret erstellt wird, das die gleichen Dimensionen wie das benutzerdefinierte Caret hat, und das System caret an derselben Position auf der Benutzeroberfläche des Steuerelements wie das benutzerdefinierte Caret positionieren , d. h. an der Einfügemarke. Alternativ kann ein Steuerelement, das ein benutzerdefiniertes Caret verwendet, einen Microsoft Active Accessibility-Anbieter für OBJID_CARET implementieren, um Barrierefreiheitsinformationen direkt für Ihren benutzerdefinierten Caret bereitzustellen.

Weitere Informationen zum System caret finden Sie unter Carets.

Um zu testen, ob das Steuerelement die Position des System caret ordnungsgemäß verfügbar macht, verwenden Sie die tools Inspect und Accessible Event Watcher Tools.

Die Bildschirmkoordinaten der Mitte der System-Caret-Bitmap sollten immer mit der Position der Einfügemarke übereinstimmen. Auf diese Weise kann ein Client die Caretbildschirmkoordinaten in einem Aufruf von ITextProvider::RangeFromPoint verwenden, um einen Textbereich abzurufen, der die Position der Einfügemarke genau darstellt.

Steuerelementtypen und deren unterstützte Steuerelementmuster

Textsteuerelementtyp

TextEdit-Steuerelementmuster

TextChild-Steuerelementmuster

Übersicht über Steuerelementmuster für die Benutzeroberflächenautomatisierung

Benutzeroberflächenautomatisierungsunterstützung für Textinhalte

übersicht über Benutzeroberflächenautomatisierungsstruktur