Uso del completamento automatico del pannello di input
In Windows Vista il pannello di input tablet PC integra le nuove funzionalità di completamento automatico che consentono all'elenco completamento automatico di un'applicazione di eseguire l'aggiornamento in tempo reale quando l'input penna di un utente viene riconosciuto nel pannello di input. Inoltre, l'elenco completamento automatico dell'applicazione è posizionato in una posizione comoda per gli utenti del pannello di input. Senza completamento automatico del pannello di input, l'uso delle funzionalità di completamento automatico con il pannello di input è un processo difficile, che richiede agli utenti di inserire un carattere alla volta e spostare il pannello di input per accedere ai suggerimenti di completamento automatico. Con l'integrazione, il completamento automatico è uno strumento potente per gli utenti di Tablet PC che accelera e aumenta la facilità di immissione di testo con Il pannello di input.
Sono disponibili tre opzioni per il modo in cui un'applicazione può sfruttare l'integrazione del completamento automatico del pannello di input. Le applicazioni che contengono funzionalità di completamento automatico compilate usando il completamento automatico della shell (tramite l'interfaccia IAutoComplete ) o il completamento automatico di .NET Framework (tramite l'enumerazione AutoCompleteMode ) ricevono l'integrazione del completamento automatico del pannello di input senza la necessità di modifiche al codice. Le applicazioni che includono campi di testo di completamento automatico personalizzati possono usare l'API completamento automatico del pannello di input per ottenere la stessa funzionalità.
In tutti i casi, è possibile apportare queste modifiche all'elenco completamento automatico dell'applicazione senza duplicare o modificare l'interfaccia utente o la logica di stima usata da un'applicazione per generare un elenco di completamento automatico. L'elenco completamento automatico continua a essere proprietario disegnato dall'applicazione e il contenuto dell'elenco completamento automatico corrisponde a se il testo fosse digitato direttamente nel campo di modifica.
L'integrazione del completamento automatico del pannello di input è supportata nel sistema operativo Windows Vista o versioni successive. L'integrazione del completamento automatico del pannello di input è integrata nel completamento automatico della shell a partire da Windows Vista e in Windows Forms sviluppo a partire da .NET Framework versione 3.0. Sebbene IAutoComplete e AutoCompleteMode vengano entrambi eseguiti nelle versioni precedenti di Windows, l'integrazione del completamento automatico del pannello di input non è supportata in Microsoft Windows XP Tablet PC Edition o nei sistemi operativi precedenti. Se si esegue il completamento automatico del pannello di input nelle versioni precedenti di Tablet PC, le applicazioni ripristinano il comportamento di pre-integrazione.
Motivi per integrare gli elenchi di completamento automatico dell'applicazione con il pannello di input
L'integrazione dell'elenco completamento automatico di un'applicazione consente la massima facilità e velocità di input per gli utenti che immettono testo in un campo di testo che include la funzionalità Completamento automatico. Inoltre, un'applicazione che include l'integrazione del completamento automatico del pannello di input appare immediatamente come se fosse stata sviluppata con il Tablet PC, rendendo l'applicazione più attraente per gli utenti di Tablet PC.
Interazione tra pannello di input e elenco di completamento automatico senza integrazione
Uso del pannello di input per immettere testo in un campo di testo che include un elenco di completamento automatico, ma non integrato con il pannello di input:
- L'utente posiziona lo stato attivo nel campo di testo e apre il pannello di input.
- L'utente scrive uno o due caratteri.
- L'utente tocca Inserisci. Il pannello di input immette il testo nel campo di testo dell'applicazione. Viene visualizzato l'elenco completamento automatico dell'applicazione ed è probabilmente parzialmente o completamente oscurato dal pannello di input.
- L'utente trascina il pannello di input per individuare l'elenco completamento automatico dell'applicazione.
- Supponendo che la voce corretta sia inclusa nell'elenco Completamento automatico, l'utente può ora selezionare tale voce; in caso contrario, l'utente deve ripetere i passaggi 2 e 3.
Questo è chiaramente un processo complesso. Le aspettative dell'utente sul funzionamento di un elenco completamento automatico devono essere tratteggiate e la loro capacità di eseguire attività soffre.
Miglioramento dell'interazione tra pannello di input e elenco di completamento automatico con l'integrazione
Uso del pannello di input per immettere testo in un campo di testo che include un elenco di completamento automatico integrato con il pannello di input:
- L'utente posiziona lo stato attivo nel campo di testo e apre il pannello di input.
- L'utente scrive uno o due caratteri. L'elenco completamento automatico dell'applicazione viene visualizzato direttamente sopra o sotto il pannello di input quando l'utente scrive testo.
- L'utente seleziona la voce dall'elenco Completamento automatico; la voce viene inserita direttamente nel campo di testo dell'applicazione oppure l'utente ripete il passaggio 2 fino a quando non viene visualizzata la voce corretta.
A causa dell'integrazione, l'elenco Completamento automatico viene visualizzato e aggiornato durante la scrittura dell'utente nel pannello di input. Inoltre, l'elenco è posizionato in modo che sia comodo per l'utente accedere durante la scrittura e non oscurato dal Pannello di input. Infine, quando l'utente seleziona un elemento da un elenco completamento automatico, l'elemento viene inserito direttamente nel campo di immissione di testo dell'applicazione, consentendo all'utente di ignorare il passaggio di inserimento di testo dal pannello di input.
Componenti di completamento automatico standard che includono l'integrazione del completamento automatico del pannello di input
Sia IAutoComplete che AutoCompleteMode includono l'integrazione predefinita del completamento automatico del pannello di input. Le applicazioni che usano uno di questi componenti di completamento automatico standard possono sfruttare le funzionalità di completamento automatico del pannello di input con poco o nessun lavoro aggiuntivo. Inoltre, mentre il completamento automatico del pannello di input è supportato solo in Windows Vista o in nuove versioni del sistema operativo Windows, le applicazioni compilate con IAutoComplete prima del rilascio di Windows Vista ottengono automaticamente l'integrazione del completamento automatico del pannello di input quando viene eseguita in Windows Vista. Le sezioni seguenti contengono altre informazioni sugli elementi IAutoComplete e AutoCompleteMode specifici che includono l'integrazione del completamento automatico del pannello di input.
Completamento automatico della shell con integrazione del completamento automatico del pannello di input
Le applicazioni che usano IAutoComplete ottengono gratuitamente l'integrazione del completamento automatico del pannello di input. Anche se le API di completamento automatico della shell sono incluse in Windows 2000 e versioni successive, l'integrazione del completamento automatico del pannello di input è supportata solo in Windows Vista e versioni più recenti. Tuttavia, le applicazioni compilate prima del rilascio di Windows Vista che usano IAutoComplete ottengono automaticamente l'integrazione del completamento automatico del pannello di input quando viene eseguita in Windows Vista.
Per sfruttare il completamento automatico tablet in questo modo, è necessario utilizzare l'oggetto di completamento automatico (CLSID_Autocomplete). Se si desidera fornire funzionalità di completamento automatico per URL o nomi di file, usare la funzione SHAutoComplete per creare l'oggetto completamento automatico.
Oltre a IAutoComplete, è possibile implementare direttamente IAutoComplete2 o IAutoCompleteDropDowne ottenere comunque l'integrazione automatica del pannello di input.
Integrazione automatica del pannello di input con applicazioni .NET Framework
A partire da .NET Framework 3.0, Windows Forms caselle di testo includono completamento automatico. Windows Forms completamento automatico della casella di testo è basato sul completamento automatico della shell, il che significa che anche l'integrazione del completamento automatico del pannello di input è incorporata. .NET Framework 3.0 è supportato a livello inferiore nelle edizioni di Windows rilasciate prima di Windows Vista. Tuttavia, poiché l'integrazione del completamento automatico del pannello di input è supportata solo in Windows Vista o versioni successive, l'integrazione del completamento automatico del pannello di input funziona solo in un'applicazione .NET Framework 3.0 quando è installata in Windows Vista o versioni successive.
Le applicazioni che desiderano sfruttare l'integrazione del completamento automatico del pannello di input in .NET Framework 3.0 devono usare un controllo TextBox Windows Forms con la proprietà AutoCompleteMode abilitata. Non è necessario eseguire altre operazioni oltre a ottenere Windows Forms completamento automatico per lavorare per sfruttare l'integrazione del completamento automatico del pannello di input.
Uso diretto delle API di completamento automatico del pannello di input
Gli sviluppatori di caselle di testo di completamento automatico personalizzate devono usare direttamente le API di completamento automatico del pannello di input per ottenere un'esperienza di input di testo migliorata abilitata dall'integrazione del completamento automatico del pannello di input nelle applicazioni. Le API di completamento automatico del pannello di input sono incluse come parte del sistema operativo Windows Vista e come parte di Tablet Platform SDK versione 1.9 o successiva. Le interfacce di completamento automatico del pannello di input sono interfacce basate su COM.
La sezione seguente descrive in dettaglio l'utilizzo di queste interfacce per un'applicazione C++. Tuttavia, queste interfacce COM possono essere implementate nella maggior parte dei linguaggi, tra cui C#, tramite l'uso dell'interoperabilità COM.
Per implementare l'integrazione del completamento automatico del pannello di input in una casella di testo di completamento automatico personalizzata, le due interfacce necessarie sono ITipAutocompleteProvider Interface e ITipAutocompleteClient Interface. Le definizioni per queste interfacce sono disponibili in TipAutoComplete.h e TipAutoComplete_i.c.
In primo luogo, un'applicazione deve definire e creare un'istanza di una classe provider di completamento automatico, che implementa ITipAutocompleteProvider per ogni campo di immissione di testo che include un elenco di completamento automatico. Questa classe gestisce il lato dell'applicazione dell'integrazione completamento automatico. Tutte le richieste di completamento automatico dal pannello di input vengono effettuate dal client di completamento automatico all'applicazione tramite il provider di completamento automatico dell'applicazione. Il provider di completamento automatico dell'applicazione deve avere accesso sia a HWND per l'elenco completamento automatico dell'applicazione che a HWIND per il campo di immissione di testo associato. Inoltre, è necessario implementare i metodi seguenti di ITipAutocompleteProvider :
Metodo ITipAutocompleteProvider::UpdatePendingText: questo metodo viene usato dal client di completamento automatico per notificare all'applicazione il testo scritto da un utente nel pannello di input. Al momento della ricezione di questa notifica, il provider è responsabile della generazione di un elenco di completamento automatico come se il testo fosse stato digitato nel campo di immissione di testo dell'applicazione. La stringa passa al provider di completamento automatico tramite il metodo ITipAutocompleteProvider::UpdatePendingText include solo il testo attualmente nel pannello di input. Pertanto, se nel campo di immissione del testo è presente testo aggiuntivo, è responsabilità del provider accodarlo correttamente al testo inviato dal client. La stringa passata dal metodo ITipAutocompleteProvider::UpdatePendingText deve essere considerata come una sostituzione della selezione corrente nel campo. Se non è presente alcuna selezione corrente, deve essere posizionata nella posizione del punto di inserimento corrente. Dopo aver generato l'elenco completamento automatico, il provider deve chiamare il metodo ITipAutocompleteProvider::Show passando TRUE per visualizzare l'elenco Completamento automatico. L'applicazione non deve memorizzare nella cache le chiamate a UpdatePendingText , ma considerare ogni chiamata aggiuntiva a UpdatePendingText come annullamento della chiamata precedente per evitare il flashing di un'interfaccia utente dell'elenco di completamento automatico non aggiornato. Il codice di esempio seguente illustra queste procedure.
HRESULT SampleProvider::UpdatePendingText(BSTR bstrPendingText) { //Discard previously cached pending text from Input Panel m_bstrPending.Empty(); //Store the new pending text from Input Panel as m_bstrPending m_bstrPending = bstrPendingText; //Get the text from the field in two chunks. The characters to //the left of the selection and the characters to the right. CComBSTR bstrLeftContext = //Text to the left of the selection CComBSTR bstrRightContext = //Text to the right of the selection //Discard previously cached complete text m_bstrCompleteText.Empty(); //Append to the field text from the left of the selection //the text from Input Panel and then append to that //the field text to the right of the selection m_bstrCompleteText.Append(bstrLeftContext); m_bstrCompleteText.Append(m_bstrPending); m_bstrCompleteText.Append(bstrRigtContext); //Update the app's AC list based on m_bstrCompleteText //... //Show the updated AC list by calling the provider's Show method Show(true); return S_OK; }
Metodo ITipAutocompleteProvider::Show: questo metodo viene chiamato da UpdatePendingText, ma può anche essere chiamato dal client di completamento automatico in qualsiasi momento. Al momento della ricezione di questa chiamata, il provider di completamento automatico deve nascondere o mostrare il provider di completamento automatico come indicato dal parametro . Prima di visualizzare l'elenco completamento automatico, è previsto che il provider di completamento automatico consulti il client di completamento automatico su dove posizionare l'elenco Completamento automatico. Altre informazioni sul posizionamento dell'elenco completamento automatico vengono visualizzate più avanti in questo articolo.
Successivamente, l'applicazione deve usare la funzione CoCreateInstance di Active Template Library (ATL) per produrre un'istanza dell'interfaccia ITipAutocompleteClient con ID classe CLSID_TipAutoCompleteClient come server in-process e quindi registrare il provider con il client. Il metodo ITipAutocompleteClient::AdviseProvider del client di completamento automatico registra il provider con il client per consentire al client di chiamare l'oggetto provider di completamento automatico dell'applicazione. Se tiptsf.dll non è presente nel sistema, la funzione CoCreateInstance ha esito negativo e restituisce REGDB_E_CLASSNOTREG. A questo punto l'applicazione può eliminare l'oggetto ITipAutocompleteProvider e procedere come se il Pannello di input non esiste, perché non si trova in un sistema di questo tipo.
L'applicazione può scegliere di creare un'istanza di ITipAutocompleteClient o un'istanza per campo di testo. La prima opzione richiede che il provider venga annullata e registrata ogni volta che lo stato attivo viene modificato. Altre informazioni sull'annullamento della registrazione del provider di completamento automatico vengono visualizzate più avanti in questo argomento.
Esistono diversi passaggi necessari per posizionare l'elenco completamento automatico che deve essere coordinato tra il provider di completamento automatico (applicazione) e il client di completamento automatico (pannello di input). Prima che venga visualizzato l'elenco Completamento automatico, a seguito di una chiamata al metodo Show del provider di completamento automatico o a causa dell'immissione di testo tramite la tastiera, il provider deve consultare il client in cui posizionare l'elenco completamento automatico. Il provider deve seguire questa procedura:
Usare il metodo ITipAutocompleteClient::RequestShowUI del client di completamento automatico per determinare se il pannello di input è pronto per visualizzare l'elenco completamento automatico. RequestShowUI accetta il parametro HWND che è HWND per la finestra dell'elenco di completamento automatico e il metodo restituisce TRUE o FALSE per indicare se si tratta dello stato in cui è possibile visualizzare l'elenco completamento automatico. Se il client restituisce FALSE, il provider non deve tentare di visualizzare l'elenco completamento automatico.
Chiamare RequestShowUI per impostare l'handle della finestra elenco completamento automatico popup prima di chiamare il metodo ITipAutocompleteClient::P referredRects. In caso contrario, verrà generato un errore di E_INVALIDARG quando si chiama PreferredRects.
Se RequestShowUI restituisce TRUE, il provider deve calcolare il rettangolo di coordinata dello schermo predefinito dell'elenco completamento automatico in base alla posizione del campo della voce di testo e quindi chiamare il metodo ITipAutocompleteClient del client di completamento automatico::P referredRects. Ciò consente al client di completamento automatico di modificare il rettangolo per evitare la sovrapposizione dell'elenco completamento automatico con il pannello di input. Il metodo PreferredRects accetta quattro parametri:
- RECT rcACList: rettangolo di coordinata dello schermo predefinito dell'elenco Completamento automatico.
- RECT rcField: rettangolo di coordinata dello schermo del campo di voce di testo corrispondente.
- RECT *prcModifiedACList: rettangolo della coordinata dello schermo modificato per il completamento automatico
- BOOL *pfShowAbove: questo parametro indica al provider se il rettangolo prcModifiedACList posiziona l'elenco di completamento automatico sopra o sotto il pannello di input. L'applicazione può usare queste informazioni per disegnare correttamente gli elementi dell'interfaccia utente, ad esempio handle di ridimensionamento e barre di scorrimento. Il provider deve inizialmente passare nella direzione in cui l'elenco Completamento automatico verrebbe posizionato rispetto al campo di voce di testo da rcACList. Il client non cambia pfShowAbove se imposta prcModifiedACList uguale a rcACList.
Usare i valori restituiti degli argomenti prcModifiedACList e pfShowAbove out per posizionare e visualizzare la finestra elenco di completamento automatico. Se il pannello di input non è in uso, RequestShowUI restituisce sempre TRUE e prcModifiedACList è sempre uguale a rcACList. pfShowAbove è invariato, il risultato è che le chiamate non hanno alcun effetto sul comportamento dell'applicazione. Il codice di esempio seguente illustra queste procedure.
HRESULT SampleProvider::Show(BOOL fShow)
{
//Ask the AC client if it is OK to show the Autocomplete list.
BOOL fAllowShowing = FALSE;
m_spACClient->RequestShowUI(m_hWndList, &fAllowShowing);
if (fShow && fAllowingShowing)
{
// Create the parameters required to call PreferredRects
RECT rcField = //Rectangle for app's text field
RECT rcACList = //Default rectangle for app's AC list
RECT rcModifiedACList = {0, 0, 0, 0};
BOOL fShowAbove = TRUE;
//Ask the AC client to modify the position of the AC list
m_spACClient->PreferredRects(&rcACList, &rcField,
&rcModifiedACList, &fShowAbove);
//Show the Autocomplete UI at the modified preferred rectangle
//from rcModifiedACList and the directional info provide by
//fShowAbove
//...
}
else
{
//Hide the Autocomplete list and clean up
//...
}
return S_OK;
}
Quando l'utente seleziona un elemento nell'elenco Completamento automatico, il provider deve chiamare il metodo ITipAutocompleteClient::UserSelection oltre a inserire il testo dell'elemento selezionato nel campo voce di testo. Il pannello di input usa questa notifica per eliminare tutto il testo rimanente che non è ancora stato inserito dal pannello di input.
Infine, quando il provider non è più necessario, il provider deve essere scollegato dal client di completamento automatico chiamando il metodo ITipAutocompleteClient::UnadviseProvider per annullare la registrazione del provider. Il provider potrebbe dover essere annullato per uno dei due motivi seguenti: perché il campo della voce di testo associato al provider è stato eliminato o perché l'applicazione sceglie di creare un solo client di completamento automatico anziché un campo di immissione di testo. In questa istanza il provider deve essere annullata ogni volta che lo stato attivo viene spostato dal campo di testo.
Conclusione
L'integrazione del completamento automatico del pannello di input è uno strumento potente per migliorare l'esperienza utente nelle applicazioni Windows che includono elenchi di completamento automatico nei PC Tablet. Senza integrazione, gli utenti del pannello di input devono passare attraverso un processo noioso di inserimento di testo un carattere alla volta e riposizionando il pannello di input per usare Il completamento automatico. Con l'integrazione, gli elenchi di completamento automatico vengono visualizzati in una posizione comoda come utenti nel pannello di input, aumentando sia la velocità che la facilità di immissione del testo. Nelle applicazioni che includono funzionalità di completamento automatico basate sull'integrazione automatica di Shell o su .NET Framework 3.0 Completamento automatico, l'integrazione automatica del pannello di input è una funzionalità gratuita e accattivante. Inoltre, viene fornito un semplice set di interfacce basate su COM per abilitare la stessa esperienza integrata per le applicazioni che scelgono di usare controlli autocompleti personalizzati.
Argomenti correlati