Partager via


Utilisation de la saisie semi-automatique

La saisie automatique étend les chaînes qui ont été partiellement entrées dans un contrôle d’édition en chaînes complètes. Par exemple, lorsqu’un utilisateur commence à entrer une URL dans le contrôle De modification d’adresse incorporée dans la barre d’outils Windows Internet Explorer, la saisie automatique développe la chaîne en une ou plusieurs options d’URL complètes qui sont cohérentes avec la chaîne partielle existante. Une chaîne d’URL partielle telle que « micro » peut être développée vers «https://www.microsoft.com" ; ou « https://www.microsoft.com/windows". La saisie automatique est généralement utilisée avec des contrôles d’édition ou avec des contrôles qui ont un contrôle d’édition incorporé, comme le contrôle ComboBoxEx .

Ajout de fonctionnalités de saisie semi-automatique à votre application

Une application peut ajouter une fonctionnalité de saisie semi-automatique à un contrôle d’édition de deux manières :

  • SHAutoComplete est une fonction simple qui peut effectuer une saisie semi-automatique d’un chemin d’accès ou d’une URL de fichier.
  • L’interface IAutoComplete est exposée par l’objet de saisie semi-automatique (CLSID_AutoComplete). Il permet aux applications d’initialiser, d’activer et de désactiver l’objet. IAutoComplete permet davantage de contrôle sur les sources de saisie semi-automatique, y compris la possibilité d’ajouter une source personnalisée. Le reste de cette rubrique traite de l’utilisation d’IAutoComplete. Consultez Comment activer la saisie semi-automatique manuellement pour obtenir des exemples d’utilisation spécifiques.

Modes de saisie semi-automatique

Lorsque vous utilisez IAutoComplete, la saisie automatique peut afficher la chaîne terminée en deux modes : l’application automatique et la suggestion automatique. Les modes sont indépendants ; vous pouvez activer l’une ou l’autre des deux. Pour spécifier le mode, appelez IAutoComplete2::SetOptions.

Application automatique

En mode d’application automatique, la saisie automatique ajoute le reste de la chaîne candidate la plus probable aux caractères existants, en mettant en évidence les caractères ajoutés. Si l’utilisateur continue d’entrer des caractères, ils sont ajoutés à la chaîne partielle existante. Si l’utilisateur ajoute un caractère identique au caractère en surbrillance suivant, la mise en surbrillance de ce caractère est désactivée. Les caractères restants seront toujours mis en surbrillance. Si l’utilisateur ajoute un caractère qui ne correspond pas au caractère en surbrillance suivant, la saisie automatique tente de générer une nouvelle chaîne candidate en fonction de la chaîne partielle plus grande et ajoute le reste de la nouvelle chaîne candidate à la chaîne partielle actuelle. Si aucune chaîne candidate n’est trouvée, seuls les caractères tapés s’affichent et la zone d’édition se comporte comme elle le ferait sans autocomplétion. Ce processus se poursuit jusqu’à ce que l’utilisateur accepte une chaîne.

Autosuggest

En mode de suggestion automatique, la saisie automatique affiche une liste déroulante, avec une ou plusieurs chaînes complètes suggérées, sous le contrôle d’édition. L’utilisateur peut sélectionner l’une des chaînes suggérées ou continuer à taper. À mesure que la saisie progresse, la liste déroulante peut être modifiée en fonction de la chaîne partielle actuelle. Si vous définissez l’indicateur ACO_SEARCH dans IAutoComplete2::SetOptions, la saisie semi-automatique fournit une option, en bas de la liste déroulante, pour rechercher la chaîne partielle actuelle. Cette option s’affiche même s’il n’existe aucune chaîne suggérée. Si l’utilisateur sélectionne l’option de recherche, votre application doit lancer un moteur de recherche pour l’aider.

Utilisation de sources de saisie semi-automatique prédéfinies

La saisie automatique dépend de la présence d’une source qui lui fournit des chaînes correspondant à la chaîne partielle de l’utilisateur. Vous avez la possibilité de fournir une source de saisie semi-automatique personnalisée, mais plusieurs des sources les plus courantes sont fournies par le système.

CLSID_ACLHistory

Source de saisie semi-automatique qui correspond à la liste d’URL dans la liste historique de l’utilisateur.

CLSID_ACLMRU

Source de saisie semi-automatique qui correspond à la liste d’URL de la liste récemment utilisée de l’utilisateur.

CLSID_ACListISF

Source de saisie semi-automatique qui correspond aux éléments de l’espace de noms Shell : les fichiers sur l’ordinateur de l’utilisateur ainsi que les éléments dans des dossiers virtuels tels que Panneau de configuration.

Il arrive que, plutôt que de libérer immédiatement les ressources, vous souhaiterez peut-être conserver les pointeurs d’interface vers les différents objets impliqués dans la saisie semi-automatique. En particulier, cela est effectué lorsque vous souhaitez ajuster le comportement de saisie semi-automatique dynamiquement. La instance la plus courante se produit lors de l’utilisation de l’objet CLSID_ACListISF, qui effectue la saisie semi-automatique à partir de l’espace de noms Shell et a également la possibilité (ACLO_CURRENTDIR) d’énumérer à partir du répertoire actif. Par exemple, lorsque vous accédez à un nouveau dossier, Internet Explorer modifie le répertoire actuel de la barre d’adresses et les paramètres doivent donc être modifiés dynamiquement. Il existe deux façons de spécifier le répertoire que l’objet CLSID_ACListISF doit traiter comme répertoire actif :

Dans ce qui suit, supposons que pal est un pointeur vers l’interface IACList d’un objet CLSID_ACListISF :

  • Utilisation d’IPersistFolder :

    Pour indiquer à l’objet CLSID_ACListISF qu’un ITEMIDLIST particulier doit être traité comme le répertoire actif, vous pouvez utiliser l’interface IPersistFolder de l’objet. Étant donné qu’un ITEMIDLIST peut faire référence à un dossier virtuel, cette méthode est plus flexible que l’utilisation d’ICurrentWorkingDirectory.

    Notez que les exemples suivants utilisent le modèle QueryInterface, qui permet d’obtenir une liste de paramètres simplifiée.

    IPersistFolder *ppf;
    
    hr = pal2->QueryInterface(IID_PPV_ARGS(&ppf));   
    if (SUCCEEDED(hr))
    {
        hr = ppf->Initialize(pidlCurrentDirectory);
        ppf->Release();
    }
    
  • Utilisation d’ICurrentWorkingDirectory :

    Pour donner à l’objet CLSID_ACListISF un chemin d’accès en tant que répertoire actif, vous pouvez utiliser l’interface ICurrentWorkingDirectory de l’objet.

    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();
    }