Udostępnij przez


Korzystanie z autouzupełniania

Autouzupełnianie rozszerza ciągi, które zostały częściowo wprowadzone w kontrolce edycji , zamieniając je na pełne ciągi. Na przykład gdy użytkownik zacznie wprowadzać adres URL w kontrolce Edycja adresu osadzona na pasku narzędzi programu Windows Internet Explorer, autouzupełnianie rozszerza ciąg w co najmniej jedną pełną opcję adresu URL zgodną z istniejącym ciągiem częściowym. Częściowy ciąg adresu URL, taki jak "mic", może zostać rozszerzony na "https://www.microsoft.com" lub "https://www.microsoft.com/windows". Autouzupełnianie jest zwykle używane z kontrolkami edycji lub kontrolkami z osadzoną kontrolką edycji, taką jak kontrolka ComboBoxEx.

Dodawanie funkcji autouzupełniania do aplikacji

Aplikacja może dodać funkcję autouzupełniania do kontrolki edycji na dwa sposoby:

  • SHAutoComplete to prosta funkcja, która może automatycznie wypełniać ścieżkę pliku lub adres URL.
  • interfejs IAutoComplete jest udostępniany przez obiekt autouzupełniania (CLSID_AutoComplete). Umożliwia ona aplikacjom inicjowanie, włączanie i wyłączanie obiektu. IAutoComplete umożliwia większą kontrolę nad źródłami autouzupełniania, w tym możliwość dodawania niestandardowego źródła. W pozostałej części tego tematu omówiono użycie IAutoComplete. Zobacz Jak włączyć autouzupełnianie ręcznie, aby zapoznać się z konkretnymi przykładami użycia.

Tryby autouzupełniania

W przypadku korzystania z IAutoCompleteautouzupełnianie może wyświetlać ukończony ciąg w dwóch trybach: autoaplikacja i automatyczne sugerowanie. Tryby są niezależne; można włączyć jedną lub obie te opcje. Aby określić tryb, wywołaj metodę IAutoComplete2::SetOptions.

auto-dodawanie

W trybie automatycznego dodawania, funkcja autouzupełniania dołącza pozostałą część najbardziej pasującego ciągu do istniejących znaków, podkreślając dołączone znaki. Jeśli użytkownik będzie nadal wprowadzać znaki, zostaną one dodane do istniejącego częściowego ciągu znaków. Jeśli użytkownik doda znak identyczny z następnym wyróżnionym znakiem, wyróżnienie tego znaku zostanie wyłączone. Pozostałe znaki będą nadal wyróżnione. Jeśli użytkownik dodaje znak, który jest różny od następnego podświetlonego znaku, mechanizm autouzupełniania próbuje wygenerować nowy proponowany ciąg na podstawie większego ciągu częściowego i dołącza pozostałą część nowego proponowanego ciągu do bieżącego ciągu częściowego. Jeśli nie można odnaleźć żadnego ciągu kandydata, wyświetlane są tylko wpisane znaki, a pole edycji zachowuje się tak, jakby nie było autouzupełniania. Ten proces będzie kontynuowany, dopóki użytkownik nie zaakceptuje ciągu.

autopodpowiedź

W trybie podpowiedzi, autouzupełnianie wyświetla listę rozwijaną z co najmniej jednym sugerowanym pełnym ciągiem pod polem edycji. Użytkownik może wybrać jeden z sugerowanych ciągów lub kontynuować wpisywanie. W miarę postępu wpisywania lista rozwijana może zostać zmodyfikowana na podstawie aktualnego częściowego ciągu. Jeśli ustawisz flagę ACO_SEARCH w IAutoComplete2::SetOptions, funkcja autouzupełniania udostępnia opcję na dole listy rozwijanej, pozwalającą na wyszukiwanie bieżącego ciągu częściowego. Ta opcja jest wyświetlana nawet wtedy, gdy nie ma sugerowanych ciągów. Jeśli użytkownik wybierze opcję wyszukiwania, aplikacja powinna uruchomić wyszukiwarkę, aby pomóc użytkownikowi.

Używanie wstępnie zdefiniowanych źródeł autouzupełniania

Autouzupełnianie zależy od źródła, które dostarcza ciągi do dopasowania względem częściowego ciągu wpisanego przez użytkownika. Istnieje możliwość udostępnienia niestandardowego źródła autouzupełniania, ale niektóre z najbardziej typowych źródeł są udostępniane przez system.

CLSID_ACLHistory

Źródło autouzupełniania zgodne z listą adresów URL w historii użytkownika.

CLSID_ACLMRU

Źródło autouzupełniania, które dopasowuje się do listy adresów URL na liście ostatnio używanych elementów użytkownika.

CLSID_ACListISF

Źródło autouzupełniania, które dopasowuje się do elementów w przestrzeni nazw powłoki: plików na komputerze użytkownika oraz elementów w folderach wirtualnych, takich jak Panel Sterowania.

Istnieją sytuacje, gdy zamiast natychmiast zwalniać zasoby, warto zachować wskaźniki interfejsu do różnych obiektów zaangażowanych w autouzupełnianie. W szczególności jest to wykonywane, gdy chcesz dynamicznie dostosować zachowanie autouzupełniania. Najczęstszym przykładem tego jest sytuacja, gdy używamy obiektu CLSID_ACListISF, który automatycznie uzupełnia namespace powłoki i ma możliwość (ACLO_CURRENTDIR) wyliczania z bieżącego katalogu. Na przykład po przejściu do nowego folderu program Internet Explorer zmienia bieżący katalog paska adresu i dlatego ustawienia muszą być zmieniane dynamicznie. Istnieją dwa sposoby określania katalogu, który CLSID_ACListISF obiekt powinien traktować jako bieżący katalog:

W poniższym przyjmuje się, że pal jest wskaźnikiem do interfejsu IACList obiektu CLSID_ACListISF.

  • Za pomocą IPersistFolder:

    Aby poinformować obiekt CLSID_ACListISF, że określony ITEMIDLIST powinien być traktowany jako bieżący katalog, można użyć interfejsu IPersistFolder obiektu. Ponieważ ITEMIDLIST może odwoływać się do folderu wirtualnego, ta metoda jest bardziej elastyczna niż użycie ICurrentWorkingDirectory.

    Należy pamiętać, że w poniższych przykładach użyto szablonu QueryInterface, który umożliwia uproszczoną listę parametrów.

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

    Aby nadać obiektowi CLSID_ACListISF ścieżkę jako bieżący katalog, możesz użyć interfejsuICurrentWorkingDirectory obiektu.

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