Partager via


Modifier les contextes

Applications

Pour créer un contexte de modification, une application appelle ITfDocumentMgr::CreateContext.

Services de texte

Un service de texte utilise souvent le contexte de modification actuellement actif. Le contexte de modification actuellement actif est le contexte d’édition situé en haut de la pile du gestionnaire de documents actif. Pour obtenir le contexte actuellement actif, un service de texte appelle ITfThreadMgr::GetFocus pour obtenir le gestionnaire de documents actif, puis appelle ITfDocumentMgr::GetTop pour obtenir le contexte de modification en haut de la pile.

Dans certains cas, un service de texte nécessite son propre contexte d’édition. Pour créer un contexte de modification, un service de texte appelle ITfDocumentMgr::CreateContext.

Modifier les cookies

De nombreuses méthodes, telles que ITfRange::SetText, nécessitent un moyen d’identifier un contexte de modification doté d’un verrou de lecture seule ou de lecture/écriture de document. Un verrou de document est obtenu par le biais d’une négociation entre le gestionnaire TSF et l’application. Un service de texte ne peut pas effectuer cette négociation directement. Un service de texte peut uniquement obtenir un verrou en demandant une session de modification avec un contexte spécifique et un accès en lecture seule ou en lecture/écriture. Lorsque la session de modification est accordée, le service de texte est fourni avec un cookie de modification qui identifie le contexte de modification avec l’accès demandé. Ce cookie est ensuite passé à la méthode pour identifier le contexte de modification avec l’accès approprié.

ITfDocumentMgr::CreateContext fournit également un cookie de modification au créateur de contexte. Ce cookie dispose d’un accès en lecture seule et il n’existe aucun moyen de modifier le niveau d’accès. En vérité, le gestionnaire TSF ne négocie pas de verrou de document pour ce cookie de modification. Le cookie est marqué en interne en lecture seule, mais le document n’est pas verrouillé. Par exemple, si le créateur de contexte appelle ITfContext::GetSelection avec le cookie de modification retourné par ITfDocumentMgr::CreateContext , cela entraîne l’appel de L’ITextStoreACP::GetSelection ou ITextStoreAnchor::GetSelection de l’application. Avant d’obtenir la sélection, l’application détermine si un verrou de document existe. Étant donné qu’aucun verrou n’existe, l’application échoue avec TS_E_NOLOCK. Autrement dit, si une application appelle une méthode avec ce cookie qui entraîne l’appel de l’une des méthodes de magasin de texte de l’application, elle doit gérer ce cas en interne, car l’application n’aura pas de verrou de document.

Si le créateur de contexte a besoin d’un cookie de modification avec un accès en lecture/écriture, il doit établir sa propre session d’édition.

ITfContext

ITfDocumentMgr::CreateContext

ITfThreadMgr::GetFocus

ITfDocumentMgr::GetTop

ITfRange::SetText

Verrous de document

Sessions de modification

ITfContext::GetSelection

ITextStoreACP::GetSelection

ITextStoreAnchor::GetSelection