Textspeicher
Ein ACP ist die Position eines Zeichens in einem Textstream, der als Anzahl von Zeichen vom Anfang des Textstreams ausgedrückt wird. Da das ACP-Modell nullbasiert ist, weist das erste Zeichen in einem Textstream den ACP-Wert 0 auf. 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.
Der Manager verwendet die ACP-basierten Methoden nativ, um Text zu bearbeiten. Allerdings ist ein ankerbasierter Ansatz für Microsoft Active Accessibility-Clients verfügbar, die Anker unterstützen, wobei der Manager die Methoden ITextStoreAnchor und ITextStoreAnchorSink verwendet, um die Methoden ITextStoreACP und ITextStoreACPSink zu umschließen .
Der Textspeicher steuert den Zugriff auf den Textstream mithilfe von Dokumentsperren. Zum Lesen oder Ändern des Textspeichers muss der Manager zunächst eine Empfehlungssenke installieren, die die ITextStoreACPSink-Schnittstelle unterstützt, indem er die ITextStoreACP::AdviseSink-Methode aufruft und einen Zeiger an eine Empfehlungssenke übergibt. Die Empfehlungssenke ermöglicht es dem Manager, dokumentsperren für den Textspeicher zu erhalten und Benachrichtigungen zu erhalten, wenn der Textspeicher durch einen anderen Als den Vorgesetzten geändert wird, z. B. Benutzereingaben über die Anwendung. Ratschläge senken werden weiter unten in diesem Thema erläutert.
Eine Anwendung initialisiert einen Textspeicher, indem sie die folgenden Schritte ausführt:
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. Es folgt ein Codebeispiel für die Implementierung eines Thread-Manager-Objekts.
hr = CoCreateInstance (CLSID_TF_ThreadMgr, NULL, CLSCTX_INPROC_SERVER, IID_ITfThreadMgr, (void**)&pThreadMgr);
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.
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, bei dem es sich um den Textspeicher handelt.
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 aus der Aktivierung des Thread-Managers aufrufen. Es folgt ein Beispiel für das Erstellen eines Kontextobjekts:
hr = pDocumentMgr->CreateContext(m_ClientID, 0, (ITextStoreACP*)this, &pContext, pEditCookie);
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);
Die ITfDocumentMgr::P ush-Methode ruft ITextStoreACP::AdviseSink mit einem Zeiger auf die Empfehlungssenke-Schnittstelle auf, um eine neue Ratgebersenke zu installieren oder eine vorhandene Empfehlungssenke zu ändern. Die Empfehlungssenke empfängt Benachrichtigungen, wenn der Textspeicher von einem anderen Als dem 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. Weitere Benachrichtigungen für 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 ITextStoreACPSink-Schnittstellenmethoden nur 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 Komposition bezeichnet wird.