Uso del completamento automatico
Il completamento automatico espande le stringhe che sono state parzialmente immesse in un controllo di modifica in stringhe complete. Ad esempio, quando un utente inizia a immettere un URL nel controllo Modifica indirizzo incorporato nella barra degli strumenti di Windows Internet Explorer, il completamento automatico espande la stringa in una o più opzioni url complete coerenti con la stringa parziale esistente. Una stringa DI URL parziale, ad esempio "mic" potrebbe essere espansa in "https://www.microsoft.com" o "https://www.microsoft.com/windows". Il completamento automatico viene in genere usato con controlli di modifica o con controlli con un controllo di modifica incorporato, ad esempio il controllo ComboBoxEx .
Un'applicazione può aggiungere funzionalità di completamento automatico a un controllo di modifica in due modi:
- SHAutoComplete è una semplice funzione che può eseguire il completamento automatico di un percorso o un URL di file.
- L'interfaccia IAutoComplete viene esposta dall'oggetto completamento automatico (CLSID_AutoComplete). Consente alle applicazioni di inizializzare, abilitare e disabilitare l'oggetto. IAutoComplete consente un maggiore controllo sulle origini di completamento automatico, inclusa la possibilità di aggiungere un'origine personalizzata. Il resto di questo argomento illustra l'uso di IAutoComplete. Per esempi di utilizzo specifici, vedere Come abilitare il completamento automatico manualmente .
Quando si usa IAutoComplete, il completamento automatico può visualizzare la stringa completata in due modalità: autoappend e autosuggest. Le modalità sono indipendenti; è possibile abilitare o entrambi. Per specificare la modalità, chiamare IAutoComplete2::SetOptions.
-
Applicazione automatica
-
In modalità autoappend, il completamento automatico aggiunge il resto della stringa candidato più probabile ai caratteri esistenti, evidenziando i caratteri accodati. Se l'utente continua a immettere caratteri, vengono aggiunti alla stringa parziale esistente. Se l'utente aggiunge un carattere identico al carattere evidenziato successivo, l'evidenziazione per tale carattere viene disattivata. I caratteri rimanenti verranno ancora evidenziati. Se l'utente aggiunge un carattere che non corrisponde al carattere evidenziato successivo, il completamento automatico tenta di generare una nuova stringa candidato in base alla stringa parziale più grande e aggiunge il resto della nuova stringa candidato alla stringa parziale corrente. Se non è possibile trovare alcuna stringa candidato, vengono visualizzati solo i caratteri tipizzato e la casella di modifica si comporta come se non si verificasse il completamento automatico. Questo processo continua fino a quando l'utente accetta una stringa.
-
Autosuggest
-
In modalità autosuggest, il completamento automatico visualizza un elenco a discesa, con una o più stringhe complete suggerite, sotto il controllo di modifica. L'utente può selezionare una delle stringhe suggerite o continuare a digitare. Quando si digitano progressi, l'elenco a discesa potrebbe essere modificato in base alla stringa parziale corrente. Se si imposta il flag ACO_SEARCH in IAutoComplete2::SetOptions, il completamento automatico fornisce un'opzione, nella parte inferiore dell'elenco a discesa, per cercare la stringa parziale corrente. Questa opzione viene visualizzata anche se non sono presenti stringhe suggerite. Se l'utente seleziona l'opzione di ricerca, l'applicazione deve avviare un motore di ricerca per aiutare l'utente.
Il completamento automatico dipende dalla presenza di un'origine che lo fornisce con stringhe da corrispondere alla stringa parziale dell'utente. È possibile fornire un'origine di completamento automatico personalizzata, ma diverse delle origini più comuni vengono fornite dal sistema.
-
CLSID_ACLHistory
-
Origine di completamento automatico corrispondente all'elenco URL nell'elenco Cronologia dell'utente.
-
CLSID_ACLMRU
-
Origine di completamento automatico corrispondente all'elenco URL nell'elenco Usato di recente dell'utente.
-
CLSID_ACListISF
-
Origine di completamento automatico corrispondente agli elementi nello spazio dei nomi shell: file nel computer dell'utente, nonché elementi nelle cartelle virtuali, ad esempio Pannello di controllo.
Esistono occasioni in cui, anziché liberare immediatamente le risorse, è possibile conservare i puntatori dell'interfaccia ai vari oggetti coinvolti nel completamento automatico. In particolare, questa operazione viene eseguita quando si vuole modificare il comportamento di completamento automatico in modo dinamico. L'istanza più comune di questo si verifica quando si usa l'oggetto CLSID_ACListISF, che esegue il completamento automatico dallo spazio dei nomi shell e ha anche l'opzione (ACLO_CURRENTDIR) dell'enumerazione dalla directory corrente. Ad esempio, quando si passa a una nuova cartella, Internet Explorer modifica la directory corrente della barra degli indirizzi e quindi le impostazioni devono essere modificate dinamicamente. Esistono due modi per specificare la directory che l'oggetto CLSID_ACListISF deve considerare come la directory corrente:
- IPersistFolder specifica la directory tramite un ITEMIDLIST.
- ICurrentWorkingDirectory specifica la directory tramite una stringa di percorso.
Nell'esempio seguente si supponga che pal sia un puntatore all'interfaccia IACList di un oggetto CLSID_ACListISF:
Uso di IPersistFolder:
Per indicare all'oggetto CLSID_ACListISF che un determinato ITEMIDLIST deve essere considerato come directory corrente, è possibile usare l'interfaccia IPersistFolder dell'oggetto. Poiché un ITEMIDLIST può fare riferimento a una cartella virtuale, questo metodo è più flessibile rispetto all'uso di ICurrentWorkingDirectory.
Si noti che gli esempi seguenti usano QueryInterface templatized, che consente un elenco di parametri semplificato.
IPersistFolder *ppf; hr = pal2->QueryInterface(IID_PPV_ARGS(&ppf)); if (SUCCEEDED(hr)) { hr = ppf->Initialize(pidlCurrentDirectory); ppf->Release(); }
Uso di ICurrentWorkingDirectory:
Per assegnare all'oggetto CLSID_ACListISF un percorso come directory corrente, è possibile usare l'interfaccia ICurrentWorkingDirectory dell'oggetto.
WCHAR pwszDirectory[MAX_PATH] = L"C:\\Program Files"; ICurrentWorkingDirectory *pcwd; hr = pal2->QueryInterface(IID_PPV_ARGS(&pcwd)); if (SUCCEEDED(hr)) { hr = pcwd->SetDirectory(pwszDirectory); pcwd->Release(); }