Textspeicher
Anwendungszeichenposition (ACP)
Ein ACP ist die Position eines Zeichens oder 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 einen ACP von Null auf. Zum 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 Textdatenstrom 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 zum Bearbeiten von Text. Ein ankerbasierter Ansatz ist jedoch für Microsoft Active Accessibility Clients verfügbar, die Verankerungenunterstützen, wobei der Manager ITextStoreAnchor- und ITextStoreAnchorSink- Methoden verwendet, um die ITextStoreACP-- und ITextStoreACPSink- Methoden umschließen.
Dokumentzugriffssteuerung
Der Textspeicher steuert den Zugriff auf den Textstream mithilfe Dokumentsperren. Um den Textspeicher zu lesen oder zu ändern, muss der Manager zuerst eine Empfehlungsspüle installieren, die die ITextStoreACPSink Schnittstelle unterstützt, indem die ITextStoreACP::AdviseSink Methode aufgerufen und ein Zeiger an eine Empfehlungsspüle übergeben wird. Die Empfehlungsspüle ermöglicht es dem Vorgesetzten, eine Dokumentsperre im Textspeicher zu erhalten und Benachrichtigungen zu erhalten, wenn der Textspeicher von einem anderen Textspeicher als dem Vorgesetzten geändert wird, z. B. Benutzereingaben über die Anwendung. Beratungsspülen werden weiter unten in diesem Thema behandelt.
So initialisieren Sie den Textspeicher
Eine Anwendung initialisiert einen Textspeicher durch Ausführen der folgenden Schritte:
Erstellen Sie ein Thread-Manager-Objekt basierend auf dem ITfThreadMgr Schnittstelle, indem Sie die CoCreateInstance--Funktion mit einem Zeiger auf ein Thread-Manager-Objekt aufrufen. Im Folgenden sehen Sie 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 zum Erstellen eines Kontextobjekts bereit. 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, das der Textspeicher ist.
Erstellen Sie ein Kontextobjekt aus dem Dokument-Manager, indem Sie die ITfDocumentMgr::CreateContext--Methode mit dem Zeiger auf das Textspeicherobjekt und einen Zeiger auf den Clientbezeichner aufrufen, indem Sie den Thread-Manager aktivieren. Im Folgenden sehen Sie ein Beispiel zum Erstellen eines Kontextobjekts:
hr = pDocumentMgr->CreateContext(m_ClientID, 0, (ITextStoreACP*)this, &pContext, pEditCookie);
Verschieben Sie das Kontextobjekt mit der ITfDocumentMgr::P ush--Methode auf den Stapel. Im Folgenden sehen Sie ein Beispiel für das Verschieben des Kontextobjekts auf den Stapel:
hr = pDocumentMgr->Push(pContext);
So ändern Sie den Textspeicher
Die ITfDocumentMgr::P ush--Methode ruft ITextStoreACP::AdviseSink mit einem Zeiger auf die Beratungsspüleschnittstelle auf, um eine neue Beratungsspüle zu installieren oder eine vorhandene Beratungsspüle zu ändern. Die Empfehlungsenke empfängt Benachrichtigungen, wenn der Textspeicher von einem anderen Als dem Vorgesetzten geändert wird, z. B. Benutzereingaben an die Anwendung. Anwendungen müssen die ITfThreadMgrEventSink::OnSetFocus Methode aufrufen, wenn die Eingabemethode den Fokus abruft. Andere Benachrichtigungen an den Thread-Manager werden durch Aufrufen der entsprechenden ITextStoreACPSink Schnittstellenmethoden bereitgestellt.
Anwendungen sollten jedoch die ITextStoreACPSink- Schnittstellenmethoden nicht als Reaktion auf ITextStoreACP- Schnittstellenmethoden aufrufen. Anwendungen sollten nur ITextStoreACPSink Schnittstellenmethoden aufrufen, wenn der Textspeicher von einem anderen Als dem Manager geändert wird.
Der Inhalt des Textspeichers kann mit einem temporären Eingabezustand geändert werden, der als Kompositionbezeichnet wird.
Verwandte Themen