Magasins de texte
Position de caractère de l’application (ACP)
Un ACP est l’emplacement d’un caractère ou de caractères, dans un flux de texte exprimé sous la forme du nombre de caractères à partir du début du flux de texte. Étant donné que le modèle ACP est basé sur zéro, le premier caractère d’un flux de texte a un ACP de zéro. Par exemple:
Text Stream H | e | l | l | o | | W | o | r | l | d
ACP 0 1 2 3 4 5 6 7 8 9 10
Un magasin de texte implémente un objet qui prend en charge l’interface ITextStoreACP, ce qui permet au flux de texte d’être exprimé dans un ACP. Les méthodes d’interface ITextStoreACP utilisent la plage ACP du flux de texte pour modifier le texte.
applications Anchor-Based
Le gestionnaire utilise les méthodes ACP en mode natif pour manipuler du texte. Toutefois, une approche basée sur les ancres est disponible pour clients Microsoft Active Accessibility qui prennent en charge ancres, par lequel le responsable utilise ITextStoreAnchor et méthodes ITextStoreAnchorSink pour encapsuler les méthodes ITextStoreACP et ITextStoreACPSink.
Contrôle d’accès au document
Le magasin de texte contrôle l’accès au flux de texte à l’aide de verrous de document. Pour lire ou modifier le magasin de texte, le gestionnaire doit d’abord installer un récepteur de conseils qui prend en charge l’interface ITextStoreACPSink en appelant la méthode ITextStoreACP ::AdviseSink méthode et en passant un pointeur à un récepteur de conseils. Le récepteur d’avis permet au gestionnaire d’obtenir des verrous de document sur le magasin de texte et de recevoir des notifications lorsque le magasin de texte est modifié par un autre que le gestionnaire, par exemple l’entrée utilisateur via l’application. Les récepteurs de conseils sont abordés plus loin dans cette rubrique.
Comment initialiser le magasin de texte
Une application initialise un magasin de texte en effectuant les étapes suivantes :
Créez un objet de gestionnaire de threads basé sur l’interface ITfThreadMgr en appelant la fonction CoCreateInstance avec un pointeur vers un objet de gestionnaire de threads. Voici un exemple de code d’implémentation d’un objet de gestionnaire de threads.
hr = CoCreateInstance (CLSID_TF_ThreadMgr, NULL, CLSCTX_INPROC_SERVER, IID_ITfThreadMgr, (void**)&pThreadMgr);
Activez l’objet de gestionnaire de threads en appelant la méthode ITfThreadMgr ::Activate. Cette méthode fournit un pointeur vers un identificateur client utilisé pour créer un objet de contexte. Le gestionnaire de threads est utilisé pour implémenter un objet gestionnaire de documents.
Créez un objet gestionnaire de documents basé sur l’interface ITfDocumentMgr en appelant la méthode ITfThreadMgr ::CreateDocumentMgr avec un pointeur vers l’objet gestionnaire de documents. L’objet gestionnaire de documents est utilisé pour implémenter un objet de contexte qui est le magasin de texte.
Créez un objet de contexte à partir du gestionnaire de documents en appelant la méthode ITfDocumentMgr ::CreateContext avec le pointeur vers l’objet de magasin de texte et un pointeur vers l’identificateur client de l’activation du gestionnaire de threads. Voici un exemple de création d’un objet de contexte :
hr = pDocumentMgr->CreateContext(m_ClientID, 0, (ITextStoreACP*)this, &pContext, pEditCookie);
Envoyez l’objet de contexte sur la pile avec la méthode ITfDocumentMgr ::P ush. Voici un exemple d’envoi (push) de l’objet de contexte sur la pile :
hr = pDocumentMgr->Push(pContext);
Comment modifier le magasin de texte
La méthode ITfDocumentMgr ::P ush appelle ITextStoreACP ::AdviseSink avec un pointeur vers l’interface du récepteur conseiller pour installer un nouveau récepteur conseiller ou modifier un récepteur d’avis existant. Le récepteur d’avis reçoit des notifications lorsque le magasin de texte est modifié par autre chose que le gestionnaire, par exemple l’entrée utilisateur dans l’application. Les applications doivent appeler la méthode ITfThreadMgrEventSink ::OnSetFocus lorsque la méthode d’entrée obtient le focus. D’autres notifications au gestionnaire de threads sont fournies en appelant les méthodes d’interface ITextStoreACPSink appropriées.
Toutefois, les applications ne doivent pas appeler les méthodes d’interface ITextStoreACPSink en réponse à méthodes d’interface ITextStoreACP. Les applications doivent uniquement appeler méthodes d’interface ITextStoreACPSink lorsque le magasin de texte est modifié par un autre élément que le gestionnaire.
Le contenu du magasin de texte peut être modifié avec un état d’entrée temporaire appelé composition.
Rubriques connexes