Archivi di testo
Un ACP è la posizione di un carattere, o di caratteri, in un flusso di testo espresso come numero di caratteri dall'inizio del flusso di testo. Poiché il modello ACP è in base zero, il primo carattere in un flusso di testo ha un ACP pari a zero. Ad esempio:
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 archivio di testo implementa un oggetto che supporta l'interfaccia ITextStoreACP , che consente di esprimere il flusso di testo in un ACP. I metodi di interfaccia ITextStoreACP usano l'intervallo ACP del flusso di testo per modificare il testo.
Il manager utilizza i metodi basati su ACP in modo nativo per modificare il testo. Tuttavia, è disponibile un approccio basato su ancoraggio per i client di Microsoft Active Accessibility che supportano ancoraggi, in cui il manager usa i metodi ITextStoreAnchor e ITextStoreAnchorSink per eseguire il wrapping dei metodi ITextStoreACP e ITextStoreACPSink.
L'archivio di testo controlla l'accesso al flusso di testo usando blocchi di documento. Per leggere o modificare l'archivio di testo, il gestore deve prima installare un sink consigliato che supporti l'interfaccia ITextStoreACPSink chiamando il metodo ITextStoreACP::AdviseSink e passando un puntatore a un sink consigliato. Il sink di avviso consente al gestore di ottenere blocchi di documento nell'archivio di testo e ricevere notifiche quando l'archivio di testo viene modificato da un elemento diverso dal manager, ad esempio l'input dell'utente tramite l'applicazione. In questo argomento vengono illustrati i sink di avviso.
Un'applicazione inizializza un archivio di testo completando i passaggi seguenti:
Creare un oggetto di gestione thread basato sull'interfaccia ITfThreadMgr chiamando la funzione CoCreateInstance con un puntatore a un oggetto di gestione thread. Di seguito è riportato un esempio di codice per l'implementazione di un oggetto di gestione thread.
hr = CoCreateInstance (CLSID_TF_ThreadMgr, NULL, CLSCTX_INPROC_SERVER, IID_ITfThreadMgr, (void**)&pThreadMgr);
Attivare l'oggetto di gestione thread chiamando il metodo ITfThreadMgr::Activate . Questo metodo fornisce un puntatore a un identificatore client utilizzato per creare un oggetto contesto. Gestione thread viene usato per implementare un oggetto gestione documenti.
Creare un oggetto di gestione documenti basato sull'interfaccia ITfDocumentMgr chiamando il metodo ITfThreadMgr::CreateDocumentMgr con un puntatore all'oggetto gestione documenti. L'oggetto gestione documenti viene utilizzato per implementare un oggetto contesto che rappresenta l'archivio di testo.
Creare un oggetto di contesto da Gestione documenti chiamando il metodo ITfDocumentMgr::CreateContext con il puntatore all'oggetto archivio testo e un puntatore all'identificatore client dall'attivazione del gestore thread. Di seguito è riportato un esempio di creazione di un oggetto contesto:
hr = pDocumentMgr->CreateContext(m_ClientID, 0, (ITextStoreACP*)this, &pContext, pEditCookie);
Eseguire il push dell'oggetto di contesto nello stack con il metodo ITfDocumentMgr::P ush . Di seguito è riportato un esempio di push dell'oggetto contesto nello stack:
hr = pDocumentMgr->Push(pContext);
Il metodo ITfDocumentMgr::P ush chiama ITextStoreACP::AdviseSink con un puntatore all'interfaccia sink consigliata per installare un nuovo sink consigliato o modificare un sink consigliato esistente. Il sink di avviso riceve notifiche quando l'archivio di testo viene modificato da un elemento diverso dal gestore, ad esempio l'input dell'utente per l'applicazione. Le applicazioni devono chiamare il metodo ITfThreadMgrEventSink::OnSetFocus quando il metodo di input ottiene lo stato attivo. Altre notifiche al gestore thread vengono fornite chiamando i metodi di interfaccia ITextStoreACPSink appropriati.
Tuttavia, le applicazioni non devono chiamare i metodi di interfaccia ITextStoreACPSink in risposta ai metodi di interfaccia ITextStoreACP . Le applicazioni devono chiamare metodi di interfaccia ITextStoreACPSink solo quando l'archivio di testo viene modificato da un elemento diverso dal gestore.
Il contenuto dell'archivio di testo può essere modificato con uno stato di input temporaneo denominato composizione.