Partager via


Magasins de texte

Position des caractères d’application (ACP)

Un acp est l’emplacement d’un ou plusieurs caractères dans un flux de texte exprimé en tant que 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 d’exprimer le flux de texte dans un fichier 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 basées sur ACP en mode natif pour manipuler du texte. Toutefois, une approche basée sur les ancres est disponible pour les clients Microsoft Active Accessibility qui prennent en charge les ancres, dans le cadre de laquelle le gestionnaire utilise les méthodes ITextStoreAnchor et ITextStoreAnchorSink pour encapsuler les méthodes ITextStoreACP et ITextStoreACPSink .

Access Control de 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 d’avis qui prend en charge l’interface ITextStoreACPSink en appelant la méthode ITextStoreACP::AdviseSink et en passant un pointeur vers un récepteur d’avis. 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 autre chose que le gestionnaire, par exemple une entrée utilisateur via l’application. Les récepteurs d’avis 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 :

  1. 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 thread manager.

    hr = CoCreateInstance (CLSID_TF_ThreadMgr, NULL, CLSCTX_INPROC_SERVER, 
                            IID_ITfThreadMgr, (void**)&pThreadMgr);
    
  2. Activez l’objet 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 de gestionnaire de documents.

  3. Créez un objet de 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.

  4. 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 du client à partir 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);
    
  5. Envoyez l’objet de contexte sur la pile avec la méthode ITfDocumentMgr::P ush . Voici un exemple de push de l’objet de contexte vers 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 de récepteur de conseil pour installer un nouveau récepteur de conseil 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 une 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 aux méthodes d’interface ITextStoreACP . Les applications doivent uniquement appeler les méthodes d’interface ITextStoreACPSink lorsque le magasin de texte est modifié par autre chose que le gestionnaire.

Le contenu du magasin de texte peut être modifié avec un état d’entrée temporaire appelé composition.

Ancres

Compositions

Verrous de document

ITextStoreACPSink

ITextStoreACP

ITextStoreAnchor

ITextStoreAnchorSink

ITfDocumentMgr

ITfThreadMgr

ITfThreadMgrEventSink::OnSetFocus

TfClientId

Microsoft Active Accessibility