Condividi tramite


Uso del completamento automatico

Il completamento automatico espande le stringhe parzialmente immesse nella casella 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 a "https://www.microsoft.com" o "https://www.microsoft.com/windows". Il completamento automatico viene in genere usato con i controlli di modifica o con controlli con un controllo di modifica incorporato, ad esempio il controllo ComboBoxEx.

Aggiunta della funzionalità di completamento automatico all'applicazione

Un'applicazione può aggiungere funzionalità di completamento automatico a un controllo di modifica in due modi:

  • SHAutoComplete è una semplice funzione in grado di completare automaticamente un percorso o un URL di file.
  • L'interfaccia IAutoComplete è esposta dall'oggetto di 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. Nella parte restante di questo argomento viene illustrato l'uso di IAutoComplete. Vedere Come abilitare il completamento automatico manualmente per esempi di utilizzo specifici.

Modalità di completamento automatico

Quando si utilizza il sistema di completamento automatico IAutoComplete, è possibile visualizzare la stringa completata in due modalità: aggiunta automatica (autoappend) e suggerimento automatico (autosuggest). Le modalità sono indipendenti; è possibile abilitare o entrambi. Per specificare la modalità, chiamare IAutoComplete2::SetOptions.

Append automatico

In modalità autoappend il completamento automatico aggiunge il resto della stringa candidata più probabile ai caratteri esistenti, evidenziando i caratteri accodati. Se l'utente continua a immettere caratteri, questi 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 comunque evidenziati. Se l'utente aggiunge un carattere che non corrisponde al carattere evidenziato successivo, il completamento automatico tenta di generare una nuova stringa candidata in base alla stringa parziale più grande e accoda il resto della nuova stringa candidata alla stringa parziale corrente. Se non è possibile trovare alcuna stringa candidata, vengono visualizzati solo i caratteri digitati e la casella di modifica si comporta come se fosse senza completamento automatico. Questo processo continua fino a quando l'utente non accetta una stringa.

Suggerimenti automatici

In modalità Suggerimenti automatici, 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. Durante l'avanzamento della digitazione, l'elenco a discesa potrebbe essere modificato in base alla stringa parziale corrente. Se imposti il flag ACO_SEARCH in IAutoComplete2::SetOptions, il completamento automatico offre 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 assistere l'utente.

Uso di origini di completamento automatico predefinite

Il completamento automatico dipende dalla presenza di un'origine che fornisce stringhe che corrispondono 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

Fonte di completamento automatico che confronta con l'elenco di URL nella lista Cronologia dell'utente.

CLSID_ACLMRU

Origine di completamento automatico che corrisponde alla lista dei URL utilizzati di recente dall'utente.

CLSID_ACListISF

Un'origine di completamento automatico che corrisponde agli elementi nello spazio dei nomi Shell: i file nel computer dell'utente, nonché elementi in cartelle virtuali, come il Pannello di controllo.

In alcuni casi, invece di liberare immediatamente le risorse, è possibile conservare i puntatori di interfaccia ai vari oggetti coinvolti nel completamento automatico. In particolare, questa operazione viene eseguita quando si vuole regolare il comportamento di completamento automatico in modo dinamico. L'istanza più comune di questa situazione 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) di enumerazione dalla directory corrente. Ad esempio, quando si passa a una nuova cartella, Internet Explorer modifica la directory corrente della barra degli indirizzi e pertanto le impostazioni devono essere modificate in modo dinamico. Esistono due modi per specificare la directory che l'oggetto CLSID_ACListISF deve considerare come directory corrente:

Nel seguito, 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 particolare ITEMIDLIST deve essere considerato come directory corrente, è possibile utilizzare 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();
    }
    
  • Utilizzo 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();
    }