Magazyny tekstu
Położenie znaku aplikacji (ACP)
ACP to lokalizacja znaku lub znaków w strumieniu tekstowym, który jest wyrażony jako liczba znaków od początku strumienia tekstu. Ponieważ model ACP jest oparty na zero, pierwszy znak w strumieniu tekstowym ma wartość ACP zero. Na przykład:
Text Stream H | e | l | l | o | | W | o | r | l | d
ACP 0 1 2 3 4 5 6 7 8 9 10
Magazyn tekstu implementuje obiekt obsługujący interfejs ITextStoreACP, który umożliwia wyrażenie strumienia tekstu w formacie ACP. Metody interfejsu ITextStoreACP używają zakresu ACP strumienia tekstowego, aby zmodyfikować tekst.
aplikacje Anchor-Based
Menedżer używa metod opartych na języku ACP natywnie do manipulowania tekstem. Jednak podejście oparte na kotwicach jest dostępne dla klientów Microsoft Active Accessibility, którzy obsługują kotwice , gdzie menedżer używa ITextStoreAnchor i ITextStoreAnchorSink metod w celu opakowania ITextStoreACPACP i metod ITextStoreACPSink.
Kontrola dostępu do dokumentów
Magazyn tekstu kontroluje dostęp do strumienia tekstu przy użyciu blokad dokumentów. Aby odczytać lub zmodyfikować magazyn tekstów, menedżer musi najpierw zainstalować ujście, które obsługuje interfejs ITextStoreACPSink przez wywołanie ITextStoreACP::AdviseSink metody i przekazanie wskaźnika do ujścia. Ujście doradcy umożliwia menedżerowi uzyskanie blokad dokumentów w magazynie tekstowym i odbieranie powiadomień, gdy magazyn tekstu jest modyfikowany przez coś innego niż menedżer, na przykład dane wejściowe użytkownika za pośrednictwem aplikacji. W dalszej części tego tematu omówiono porady.
Jak zainicjować magazyn tekstów
Aplikacja inicjuje magazyn tekstów, wykonując następujące czynności:
Utwórz obiekt menedżera wątków na podstawie interfejsu ITfThreadMgr, wywołując funkcję CoCreateInstance z wskaźnikiem do obiektu menedżera wątków. Poniżej przedstawiono przykład kodu implementowania obiektu menedżera wątków.
hr = CoCreateInstance (CLSID_TF_ThreadMgr, NULL, CLSCTX_INPROC_SERVER, IID_ITfThreadMgr, (void**)&pThreadMgr);
Aktywuj obiekt menedżera wątków, wywołując metodę ITfThreadMgr::Activate. Ta metoda dostarcza wskaźnik do identyfikatora klienta użytego do utworzenia obiektu kontekstu. Menedżer wątków służy do implementowania obiektu menedżera dokumentów.
Utwórz obiekt menedżera dokumentów na podstawie interfejsu ITfDocumentMgr przez wywołanie ITfThreadMgr::CreateDocumentMgr metody z wskaźnikiem do obiektu menedżera dokumentów. Obiekt menedżera dokumentów służy do implementowania obiektu kontekstu, który jest magazynem tekstu.
Utwórz obiekt kontekstu z menedżera dokumentów, wywołując metodę ITfDocumentMgr::CreateContext z wskaźnikiem do obiektu magazynu tekstu i wskaźnikiem do identyfikatora klienta z aktywowania menedżera wątków. Poniżej przedstawiono przykład tworzenia obiektu kontekstu:
hr = pDocumentMgr->CreateContext(m_ClientID, 0, (ITextStoreACP*)this, &pContext, pEditCookie);
Wypchnij obiekt kontekstu do stosu przy użyciu metody ITfDocumentMgr::P ush. Poniżej przedstawiono przykład wypychania obiektu kontekstu do stosu:
hr = pDocumentMgr->Push(pContext);
Jak zmodyfikować magazyn tekstów
Metoda ITfDocumentMgr::P ush wywołuje metodę ITextStoreACP::AdviseSink z wskaźnikiem do interfejsu ujścia, aby zainstalować nowy ujście doradcy lub zmodyfikować istniejący ujście doradcy. Ujście doradcy odbiera powiadomienia, gdy magazyn tekstu jest modyfikowany przez coś innego niż menedżer, na przykład dane wejściowe użytkownika w aplikacji. Aplikacje muszą wywołać metodę ITfThreadMgrEventSink::OnSetFocus, gdy metoda wejściowa uzyskuje fokus. Inne powiadomienia do menedżera wątków są dostarczane przez wywołanie odpowiednich metod interfejsu ITextStoreACPSink .
Jednak aplikacje nie powinny wywoływać metod interfejsu ITextStoreACPSink w odpowiedzi na metody interfejsu ITextStoreACP . Aplikacje powinny wywoływać tylko metody interfejsu ITextStoreACPSink, gdy magazyn tekstu jest modyfikowany przez coś innego niż menedżer.
Zawartość magazynu tekstu można modyfikować przy użyciu tymczasowego stanu wejściowego o nazwie kompozycji.
Tematy pokrewne