Modifica contesti
Per creare un contesto di modifica, un'applicazione chiama ITfDocumentMgr::CreateContext.
Un servizio di testo usa spesso il contesto di modifica attualmente attivo. Il contesto di modifica attualmente attivo è il contesto di modifica nella parte superiore dello stack di Gestione documenti attivo. Per ottenere il contesto attualmente attivo, un servizio di testo chiama ITfThreadMgr::GetFocus per ottenere il gestore documenti attivo e quindi chiama ITfDocumentMgr::GetTop per ottenere il contesto di modifica nella parte superiore dello stack.
In alcuni casi, un servizio di testo richiede il proprio contesto di modifica. Per creare un contesto di modifica, un servizio di testo chiama ITfDocumentMgr::CreateContext.
Molti metodi, ad esempio ITfRange::SetText, richiedono un modo per identificare un contesto di modifica con un blocco documento di sola lettura o di lettura/scrittura. Un blocco di documenti viene ottenuto tramite una negoziazione tra il gestore TSF e l'applicazione. Un servizio di testo non può eseguire direttamente questa negoziazione. Un servizio di testo può ottenere un blocco solo richiedendo una sessione di modifica con un contesto specifico e un accesso di sola lettura o di lettura/scrittura. Quando viene concessa la sessione di modifica, il servizio di testo viene fornito con un cookie di modifica che identifica il contesto di modifica con l'accesso richiesto. Questo cookie viene quindi passato al metodo per identificare il contesto di modifica con l'accesso appropriato.
ITfDocumentMgr::CreateContext fornisce anche un cookie di modifica per l'autore del contesto. Questo cookie ha accesso di sola lettura e non è possibile modificare il livello di accesso. In verità, il responsabile TSF non negozia un blocco di documenti per questo cookie di modifica. Il cookie è contrassegnato internamente come di sola lettura, ma il documento non è effettivamente bloccato. Ad esempio, se l'autore del contesto chiama ITfContext::GetSelection con il cookie di modifica restituito da ITfDocumentMgr::CreateContext , viene generato il metodo ITextStoreACP::GetSelection o ITextStoreAnchor::GetSelection dell'applicazione. Prima di ottenere la selezione, l'applicazione determinerà se esiste un blocco del documento. Poiché non esiste alcun blocco, l'applicazione avrà esito negativo con TS_E_NOLOCK. Ovvero, se un'applicazione chiama un metodo con questo cookie che comporta la chiamata a uno dei metodi dell'archivio di testo dell'applicazione, deve gestire questo caso internamente perché l'applicazione non avrà effettivamente un blocco del documento.
Se l'autore del contesto richiede un cookie di modifica con accesso in lettura/scrittura, deve stabilire la propria sessione di modifica.