Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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:
- IPersistFolder określa katalog za pomocą ITEMIDLIST.
- ICurrentWorkingDirectory określa katalog za pomocą ciągu ścieżki.
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(); }