Archivi di testo
Posizione carattere applicazione (ACP)
Un ACP è la posizione di un carattere, o 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. Per 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.
applicazioni Anchor-Based
Il manager usa i metodi basati su ACP in modo nativo per modificare il testo. Tuttavia, è disponibile un approccio basato su ancoraggio per client di Microsoft Active Accessibility che supportano ancoraggi , in cui il manager usa ITextStoreAnchor e metodi di ITextStoreAnchorSink per eseguire il wrapping dei metodi ITextStoreACP e ITextStoreACPSink.
Controllo di accesso ai documenti
L'archivio di testo controlla l'accesso al flusso di testo usando i blocchi del documento . Per leggere o modificare l'archivio di testo, il manager deve prima installare un sink che supporti l'interfaccia ITextStoreACPSink chiamando il metodo ITextStoreACP::AdviseSink e passando un puntatore a un sink di avviso. 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. I sink di avviso vengono illustrati più avanti in questo argomento.
Come inizializzare l'archivio testo
Un'applicazione inizializza un archivio di testo completando i passaggi seguenti:
Creare un oggetto thread manager basato sull'interfaccia ITfThreadMgr chiamando la funzione CoCreateInstance con un puntatore a un oggetto thread manager. Di seguito è riportato un esempio di codice di implementazione di un oggetto di gestione thread.
hr = CoCreateInstance (CLSID_TF_ThreadMgr, NULL, CLSCTX_INPROC_SERVER, IID_ITfThreadMgr, (void**)&pThreadMgr);
Attivare l'oggetto thread manager chiamando il metodo ITfThreadMgr::Activate. Questo metodo fornisce un puntatore a un identificatore client usato per creare un oggetto contesto. Il gestore thread viene usato per implementare un oggetto gestione documenti.
Creare un oggetto 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 è l'archivio di testo.
Creare un oggetto di contesto da Gestione documenti chiamando il metodo ITfDocumentMgr::CreateContext con il puntatore all'oggetto archivio di testo e un puntatore all'identificatore client dall'attivazione della gestione 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 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);
Come modificare l'archivio testo
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 alla gestione thread vengono fornite chiamando i metodi di interfaccia appropriati ITextStoreACPSink.
Tuttavia, le applicazioni non devono chiamare i metodi di interfaccia ITextStoreACPSink in risposta ai metodi di interfaccia ITextStoreA CP. Le applicazioni devono chiamare solo metodi di interfaccia ITextStoreACPSink 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 .
Argomenti correlati