Textspeicher

Position des Anwendungszeichens (ACP)

Ein ACP ist die Position eines Zeichens oder von Zeichen in einem Textstream, der als Anzahl von Zeichen vom Anfang des Textstreams ausgedrückt wird. Da das ACP-Modell nullbasiert ist, hat das erste Zeichen in einem Textstream den ACP-Wert 0 (null). Beispiel:

Text Stream  H | e | l | l | o |   | W | o | r | l | d
ACP          0   1   2   3   4   5   6   7   8   9   10

Ein Textspeicher implementiert ein -Objekt, das die ITextStoreACP-Schnittstelle unterstützt, wodurch der Textstream in einem ACP ausgedrückt werden kann. Die ITextStoreACP-Schnittstellenmethoden verwenden den ACP-Bereich des Textstreams, um den Text zu ändern.

Anchor-Based Anwendungen

Der Manager verwendet die ACP-basierten Methoden nativ, um Text zu bearbeiten. Ein ankerbasierter Ansatz ist jedoch für Microsoft Active Accessibility Clients verfügbar, die Ankerunterstützen, wobei der Manager ITextStoreAnchor- und ITextStoreAnchorSink-Methoden verwendet, um die ITextStoreACP- und ITextStoreACPSink-Methoden zu umschließen.

Dokument Access Control

Der Textspeicher steuert den Zugriff auf den Textstream mithilfe von Dokumentsperren. Um den Textspeicher zu lesen oder zu ändern, muss der Manager zunächst eine Advise-Senke installieren, die die ITextStoreACPSink-Schnittstelle unterstützt, indem er die ITextStoreACP::AdviseSink-Methode aufruft und einen Zeiger auf eine Advise-Senke übergibt. Die Advise-Senke ermöglicht es dem Manager, dokumentsperren für den Textspeicher zu erhalten und Benachrichtigungen zu erhalten, wenn der Textspeicher durch einen anderen Textspeicher als den Manager geändert wird, z. B. Benutzereingaben über die Anwendung. Empfehlungssenken werden weiter unten in diesem Thema erläutert.

Initialisieren der Text-Store

Eine Anwendung initialisiert einen Textspeicher, indem die folgenden Schritte abgeschlossen werden:

  1. Erstellen Sie ein Thread-Manager-Objekt basierend auf der ITfThreadMgr-Schnittstelle, indem Sie die CoCreateInstance-Funktion mit einem Zeiger auf ein Thread-Manager-Objekt aufrufen. Im Folgenden wird ein Codebeispiel für die Implementierung eines Thread-Manager-Objekts beschrieben.

    hr = CoCreateInstance (CLSID_TF_ThreadMgr, NULL, CLSCTX_INPROC_SERVER, 
                            IID_ITfThreadMgr, (void**)&pThreadMgr);
    
  2. Aktivieren Sie das Thread-Manager-Objekt, indem Sie die ITfThreadMgr::Activate-Methode aufrufen. Diese Methode stellt einen Zeiger auf einen Clientbezeichner bereit, der zum Erstellen eines Kontextobjekts verwendet wird. Der Thread-Manager wird verwendet, um ein Dokument-Manager-Objekt zu implementieren.

  3. Erstellen Sie ein Dokument-Manager-Objekt basierend auf der ITfDocumentMgr-Schnittstelle, indem Sie die ITfThreadMgr::CreateDocumentMgr-Methode mit einem Zeiger auf das Dokument-Manager-Objekt aufrufen. Das Dokument-Manager-Objekt wird verwendet, um ein Kontextobjekt zu implementieren, das der Textspeicher ist.

  4. Erstellen Sie ein Kontextobjekt aus dem Dokument-Manager, indem Sie die ITfDocumentMgr::CreateContext-Methode mit dem Zeiger auf das Textspeicherobjekt und einem Zeiger auf den Clientbezeichner aufrufen, der den Thread-Manager aktiviert. Im Folgenden wird ein Beispiel für das Erstellen eines Kontextobjekts beschrieben:

    hr = pDocumentMgr->CreateContext(m_ClientID, 0, (ITextStoreACP*)this, 
                                    &pContext, pEditCookie);
    
  5. Pushen Sie das Kontextobjekt mit der ITfDocumentMgr::P ush-Methode auf den Stapel. Es folgt ein Beispiel für das Pushen des Kontextobjekts auf den Stapel:

    hr = pDocumentMgr->Push(pContext);
    

Ändern der Text-Store

Die ITfDocumentMgr::P ush-Methode ruft ITextStoreACP::AdviseSink mit einem Zeiger auf die Advise-Senkenschnittstelle auf, um eine neue Advise-Senke zu installieren oder eine vorhandene Advise-Senke zu ändern. Die Advise-Senke empfängt Benachrichtigungen, wenn der Textspeicher durch einen anderen Textspeicher als den Manager geändert wird, z. B. Benutzereingaben für die Anwendung. Anwendungen müssen die ITfThreadMgrEventSink::OnSetFocus-Methode aufrufen, wenn die Eingabemethode den Fokus erhält. Andere Benachrichtigungen an den Thread-Manager werden durch Aufrufen der entsprechenden ITextStoreACPSink-Schnittstellenmethoden bereitgestellt.

Anwendungen sollten jedoch nicht die ITextStoreACPSink-Schnittstellenmethoden als Reaktion auf ITextStoreACP-Schnittstellenmethoden aufrufen. Anwendungen sollten nur ITextStoreACPSink-Schnittstellenmethoden aufrufen, wenn der Textspeicher durch einen anderen Als den Manager geändert wird.

Der Inhalt des Textspeichers kann mit einem temporären Eingabezustand geändert werden, der als Kompositionbezeichnet wird.

Anchors

Kompositionen

Dokumentsperren

ITextStoreACPSink

Itextstoreacp

ITextStoreAnchor

ITextStoreAnchorSink

ITfDocumentMgr

ITfThreadMgr

ITfThreadMgrEventSink::OnSetFocus

TfClientId

Microsoft Active Accessibility