Sdílet prostřednictvím


Použití automatického dokončování

Automatické dokončování rozšiřuje částečně zadané řetězce v editačním ovládacím prvku na úplné řetězce. Když například uživatel začne zadávat adresu URL do ovládacího prvku Úpravy adresy, který je vložen na panelu nástrojů Aplikace Windows Internet Explorer, automatické dokončování rozbalí řetězec na jednu nebo více úplných možností adresy URL, které jsou konzistentní s existujícím částečným řetězcem. Částečný řetězec adresy URL, například "mic", se může rozšířit na "https://www.microsoft.com" nebo "https://www.microsoft.com/windows". Automatické dokončování se obvykle používá s ovládacími prvky pro úpravy nebo ovládacími prvky, které mají vložený ovládací prvek pro úpravy, jako je ComboBoxEx ovládací prvek.

Přidání funkce automatického dokončování do aplikace

Aplikace může do ovládacího prvku pro úpravy přidat funkci automatického dokončování dvěma způsoby:

  • SHAutoComplete je jednoduchá funkce, která může automaticky kompletovat cestu k souboru nebo adresu URL.
  • IAutoComplete rozhraní je vystaveno objektem automatického dokončování (CLSID_AutoComplete). Umožňuje aplikacím inicializovat, povolit a zakázat objekt. IAutoComplete umožňuje větší kontrolu nad zdroji automatického dokončování, včetně možnosti přidat vlastní zdroj. Zbývající část tohoto tématu popisuje použití IAutoComplete. Konkrétní příklady použití najdete v tématu Jak povolit automatické dokončování ručně.

Režimy automatického dokončování

Při použití IAutoCompletemůže automatické dokončování zobrazit dokončený řetězec ve dvou režimech: automatické doplnění a automatický návrh. Režimy jsou nezávislé; můžete povolit buď nebo obojí. Chcete-li určit režim, zavolejte IAutoComplete2::SetOptions.

automatické připojení

V režimu automatického dokončování připojí zbývající část nejpravděpodobnějšího kandidátního řetězce k existujícím znakům a zvýrazní připojené znaky. Pokud uživatel bude dál zadávat znaky, přidají se do existujícího částečného řetězce. Pokud uživatel přidá znak, který je shodný s dalším zvýrazněným znakem, zvýraznění daného znaku je vypnuté. Zbývající znaky budou stále zvýrazněny. Pokud uživatel přidá znak, který neodpovídá dalšímu zvýrazněného znaku, pokusí se automatické dokončování vygenerovat nový kandidátní řetězec na základě většího částečného řetězce a připojí zbytek nového kandidátního řetězce k aktuálnímu částečnému řetězci. Pokud nebyl nalezen žádný kandidátní řetězec, zobrazí se pouze zadané znaky a pole pro úpravy se chová stejně jako bez automatického dokončování. Tento proces pokračuje, dokud uživatel nepřijme řetězec.

automatické návrhy

V režimu automatického doplňování se pod ovládacím prvkem pro editaci zobrazí rozevírací seznam s jedním nebo více navrhovanými úplnými řetězci. Uživatel může vybrat jeden z navrhovaných řetězců nebo pokračovat v psaní. Při psaní může být rozevírací seznam upraven podle aktuálně napsaného textu. Pokud nastavíte příznak ACO_SEARCH v IAutoComplete2::SetOptions, automatické dokončování poskytuje možnost, která v dolní části rozevíracího seznamu vyhledá aktuální částečný řetězec. Tato možnost se zobrazí i v případě, že neexistují žádné navrhované řetězce. Pokud uživatel vybere možnost hledání, měla by vaše aplikace spustit vyhledávací modul, který mu pomůže.

Použití předdefinovaných zdrojů automatického dokončování

Automatické dokončování závisí na existenci zdroje, který mu poskytuje řetězce k porovnání s částečným řetězcem uživatele. Máte možnost poskytnout vlastní zdroj automatického dokončování, ale systém poskytuje několik nejběžnějších zdrojů.

CLSID_ACLHistory

Zdroj automatického dokončování, který odpovídá seznamu adres URL v seznamu historie uživatele.

CLSID_ACLMRU

Zdroj automatického dokončování, který porovnává s adresami URL v uživatelově seznamu nedávno používaných.

CLSID_ACListISF

Zdroj automatického dokončování, který odpovídá položkám v oboru názvů prostředí: soubory v počítači uživatele a položky ve virtuálních složkách, jako jsou Ovládací panely.

Existují situace, kdy místo okamžitého uvolnění prostředků můžete chtít zachovat ukazatele rozhraní na různé objekty, které jsou součástí automatického dokončování. Konkrétně se to provádí, když chcete dynamicky upravit chování automatického dokončování. K nejběžnějšímu výskytu dochází při použití objektu CLSID_ACListISF, který se automaticky doplňuje z jmenného prostoru Shell a má také volbu (ACLO_CURRENTDIR) výčtu z aktuálního adresáře. Když například přejdete do nové složky, Internet Explorer změní aktuální adresář panelu Adresa, a proto je potřeba nastavení dynamicky změnit. Existují dva způsoby, jak určit adresář, se kterým má objekt CLSID_ACListISF zacházet jako s aktuálním adresářem:

V dalším předpokládejme, že pal je ukazatel na rozhraní IACList objektu CLSID_ACListISF:

  • Použití IPersistFolder:

    Chcete-li objektu CLSID_ACListISF sdělit, že konkrétní ITEMIDLIST by měl být považován za aktuální adresář, můžete použít rozhraní objektu IPersistFolder. Vzhledem k tomu, ITEMIDLIST může odkazovat na virtuální složku, je tato metoda flexibilnější než použití ICurrentWorkingDirectory.

    Všimněte si, že následující příklady používají šablonované QueryInterface, což umožňuje zjednodušený seznam parametrů.

    IPersistFolder *ppf;
    
    hr = pal2->QueryInterface(IID_PPV_ARGS(&ppf));   
    if (SUCCEEDED(hr))
    {
        hr = ppf->Initialize(pidlCurrentDirectory);
        ppf->Release();
    }
    
  • Použití ICurrentWorkingDirectory:

    Chcete-li dát objektu CLSID_ACListISF cestu jako aktuální adresář, můžete použít rozhraní objektu ICurrentWorkingDirectory.

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