Automatisch aanvullen gebruiken
Autocompletie breidt tekenreeksen die gedeeltelijk zijn ingevoerd in een bewerkingselement uit tot volledige tekenreeksen. Wanneer een gebruiker bijvoorbeeld een URL begint in te voeren in de adresbalk die is ingesloten in de werkbalk van Windows Internet Explorer, wordt de URL automatisch aangevuld tot één of meer volledige URL-opties die overeenkomen met de bestaande gedeeltelijke invoer. Een gedeeltelijke URL-tekenreeks zoals 'microfoon' kan worden uitgebreid naar "https://www.microsoft.com" of "https://www.microsoft.com/windows". Automatisch aanvullen wordt meestal gebruikt met bewerkingsbesturingselementen of met besturingselementen met een geïntegreerd bewerkingsveld, zoals het besturingselement ComboBoxEx.
Functionaliteit voor automatisch aanvullen toevoegen aan uw toepassing
Een toepassing kan op twee manieren functionaliteit voor automatisch aanvullen toevoegen aan een bewerkingsveld:
- SHAutoComplete is een eenvoudige functie waarmee automatisch een bestandspad of URL kan worden aangevuld.
- IAutoComplete-interface is beschikbaar via het object voor automatisch aanvullen (CLSID_AutoComplete). Hiermee kunnen toepassingen het object initialiseren, inschakelen en uitschakelen. IAutoComplete biedt meer controle over automatisch aanvullende bronnen, waaronder de mogelijkheid om een aangepaste bron toe te voegen. In de rest van dit onderwerp wordt het gebruik van IAutoComplete-besproken. Zie Handmatig aanvullen inschakelen voor specifieke gebruiksvoorbeelden.
Mogelijkheden voor automatisch aanvullen
Wanneer u IAutoComplete-gebruikt, kan auto-aanvulling de voltooide tekenreeks in twee modi weergeven: autoaanvullen en autosuggestie. De modi zijn onafhankelijk; u kunt de ene, de andere, of beide inschakelen. Als u de modus wilt opgeven, roept u IAutoComplete2::SetOptions-aan.
-
Auto-aanvulling
-
In de auto-aanvulmodus voegt autocompletion de rest van de meest waarschijnlijke kandidaat toe aan de bestaande tekens, waarbij de toegevoegde tekens worden gemarkeerd. Als de gebruiker tekens blijft invoeren, worden deze toegevoegd aan de bestaande gedeeltelijke tekenreeks. Als de gebruiker een teken toevoegt dat identiek is aan het volgende gemarkeerde teken, wordt de markering voor dat teken uitgeschakeld. De resterende tekens worden nog steeds gemarkeerd. Als de gebruiker een teken toevoegt dat niet overeenkomt met het volgende gemarkeerde teken, probeert automatisch aanvullen een nieuwe kandidaattekenreeks te genereren op basis van de grotere gedeeltelijke tekenreeks en wordt de rest van de nieuwe kandidaattekenreeks toegevoegd aan de huidige gedeeltelijke tekenreeks. Als er geen kandidaattekenreeks kan worden gevonden, worden alleen de getypte tekens weergegeven en gedraagt het invoervak zich zoals het zou doen zonder automatische aanvulling. Dit proces wordt voortgezet totdat de gebruiker een tekenreeks accepteert.
-
Automatische suggesties
-
In de autovoltooiingsmodus wordt een vervolgkeuzelijst weergegeven met een of meer voorgestelde volledige tekenreeksen onder het bewerkingselement. De gebruiker kan een van de voorgestelde tekenreeksen selecteren of doorgaan met typen. Naarmate het typen vordert, kan de vervolgkeuzelijst worden gewijzigd op basis van de huidige gedeeltelijke tekst. Als u de vlag ACO_SEARCH instelt in IAutoComplete2::SetOptions, biedt automatisch aanvullen een optie onder aan de vervolgkeuzelijst om te zoeken naar de huidige gedeeltelijke tekenreeks. Deze optie wordt ook weergegeven als er geen voorgestelde tekenreeksen zijn. Als de gebruiker de zoekoptie selecteert, moet uw toepassing een zoekmachine starten om de gebruiker te helpen.
Vooraf gedefinieerde bronnen voor automatisch aanvullen gebruiken
Automatisch aanvullen is afhankelijk van het hebben van een bron waarmee deze tekenreeksen overeenkomen met de gedeeltelijke tekenreeks van de gebruiker. U hebt de mogelijkheid om een aangepaste bron voor automatisch aanvullen op te geven, maar verschillende van de meest voorkomende bronnen worden geleverd door het systeem.
-
CLSID_ACLHistory
-
Een bron voor automatisch aanvullen die overeenkomt met de URL-lijst in de geschiedenislijst van de gebruiker.
-
CLSID_ACLMRU
-
Een bron voor automatisch aanvullen die overeenkomt met de URL's in de gebruikerslijst met recent gebruikte URL's.
-
CLSID_ACListISF
-
Een bron voor automatisch aanvullen die overeenkomt met items in de Shell-naamruimte: bestanden op de computer van de gebruiker en items in virtuele mappen zoals configuratiescherm.
Soms wilt u, in plaats van de resources onmiddellijk vrij te maken, de interfaceaanwijzers behouden naar de verschillende objecten die betrokken zijn bij automatisch aanvullen. Dit gebeurt met name wanneer u het gedrag voor automatisch aanvullen dynamisch wilt aanpassen. De meest voorkomende instantie hiervan treedt op bij het gebruik van het CLSID_ACListISF-object, dat automatisch wordt aangevuld vanuit de Shell-naamruimte en de optie (ACLO_CURRENTDIR) heeft om ook uit de huidige map te inventariseren. Wanneer u bijvoorbeeld naar een nieuwe map navigeert, wijzigt Internet Explorer de huidige map van de adresbalk en daarom moeten de instellingen dynamisch worden gewijzigd. Er zijn twee manieren om de map op te geven die het CLSID_ACListISF-object moet behandelen als de huidige map:
- IPersistFolder geeft de map op via een ITEMIDLIST.
- ICurrentWorkingDirectory geeft de map op via een padtekenreeks.
In het volgende wordt ervan uitgegaan dat pal een pointer is naar de IACList interface van een CLSID_ACListISF-object:
Gebruik van IPersistFolder:
Als u het CLSID_ACListISF-object wilt vertellen dat een bepaalde ITEMIDLIST- moet worden behandeld als de huidige map, kunt u de IPersistFolder-interface van het object gebruiken. Omdat een ITEMIDLIST- naar een virtuele map kan verwijzen, is deze methode flexibeler dan het gebruik van ICurrentWorkingDirectory.
Houd er rekening mee dat in de volgende voorbeelden de templatized QueryInterface wordt gebruikt, waardoor een vereenvoudigde parameterlijst mogelijk is.
IPersistFolder *ppf; hr = pal2->QueryInterface(IID_PPV_ARGS(&ppf)); if (SUCCEEDED(hr)) { hr = ppf->Initialize(pidlCurrentDirectory); ppf->Release(); }
-
Als u het CLSID_ACListISF object een pad wilt geven als de huidige map, kunt u de ICurrentWorkingDirectory-interface van het object gebruiken.
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(); }