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.
Aby uzyskać bardziej szczegółową kontrolę nad zachowaniem autouzupełniania lub dodać niestandardowe źródło ciągów autouzupełniania, musisz samodzielnie zarządzać obiektem autouzupełniania. Autouzupełnianie można włączyć ręcznie w następujący sposób.
Instrukcje
Tworzenie prostego obiektu autouzupełniania
W poniższych krokach pokazano, jak utworzyć i zainicjować prosty obiekt autouzupełniania. Prosty obiekt autouzupełniania uzupełnia ciągi znaków z jednego źródła. Sprawdzanie błędów zostało celowo pominięte w tym przykładzie.
Utwórz obiekt autouzupełniania.
IAutoComplete *pac; HRESULT hr = CoCreateInstance(CLSID_AutoComplete, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pac));Utwórz źródło autouzupełniania. Możesz użyć wstępnie zdefiniowanego źródła autouzupełniania lub stworzyć własne źródło niestandardowe.
Poniższy kod używa jednego ze wstępnie zdefiniowanych źródeł autouzupełniania.
IUnknown *punkSource; hr = CoCreateInstance(CLSID_ACListISF, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&punkSource));Poniższy kod używa niestandardowego źródła autouzupełniania. Możesz napisać własne źródło autouzupełniania, implementując obiekt, który uwidacznia interfejs IEnumString. Obiekt może również opcjonalnie zaimplementować interfejsy IACList i IACList 2.
CCustomAutoCompleteSource *pcacs = new CCustomAutoCompleteSource(); hr = pcacs->QueryInterface(IID_PPV_ARGS(&punkSource)); if(SUCCEEDED(hr)) { // ... } pcacs->Release();Ustaw opcje na źródle autouzupełniania (opcjonalnie).
Zachowanie źródła autouzupełniania można dostosować, ustawiając jego opcje, o ile źródło udostępnia interfejs IACList2. W przypadku korzystania ze wstępnie zdefiniowanych źródeł autouzupełniania tylko CLSID_ACListISF eksportuje IACList2. Aby uzyskać pełną listę opcji i ich wartości, zobacz IACList2::SetOptions.
IACList2 *pal2; hr = punkSource->QueryInterface(IID_PPV_ARGS(&pal2)); if (SUCCEEDED(hr)) { hr = pal2->SetOptions(ACLO_FILESYSONLY); pal2->Release(); }Zainicjuj obiekt autouzupełniania.
W tym przykładzie hwndEdit jest uchwytem okna kontrolki edycyjnej, dla którego ma zostać włączone autouzupełnianie. Aby uzyskać opis dwóch ostatnich nieużywanych parametrów, zobacz IAutoComplete::Init.
hr = pac->Init(hwndEdit, punkSource, NULL, NULL);Ustaw opcje obiektu autouzupełniania (opcjonalnie).
Zachowanie obiektu autouzupełniania można dostosować, ustawiając jego opcje. Aby uzyskać pełną listę opcji i ich wartości, zobacz dokumentację IACList2::SetOptions.
IAutoComplete2 *pac2; hr = pac->QueryInterface(IID_PPV_ARGS(&pac2)); if (SUCCEEDED(hr)) { hr = pac2->SetOptions(ACO_AUTOSUGGEST); pac2->Release(); }Zwolnij obiekty.
Notatka
Obiekt autouzupełniania pozostaje podłączony do kontrolki edycji nawet po jego zwolnieniu. Jeśli przewidujesz konieczność uzyskania dostępu do tych obiektów później – na przykład, jeżeli chcesz zmienić opcje autouzupełniania – nie musisz zwalniać ich w tym momencie.
punkSource->Release(); pac->Release();
Tworzenie obiektu autouzupełniania złożonego
Złożony obiekt autouzupełniania dopasowuje się do ciągów z wielu źródeł. Na przykład pasek adresu programu Windows Internet Explorer używa złożonego obiektu autouzupełniania, ponieważ użytkownik może rozpocząć wpisywanie nazwy pliku lub adresu URL. Większość kroków związanych z tworzeniem złożonego obiektu autouzupełniania jest identyczna z krokami w sekcji "Tworzenie prostego obiektu autouzupełniania". Te kroki są wskazane jako takie.
Utwórz obiekt autouzupełniania. Jest to takie samo, jak krok 1 powyżej.
Utwórz menedżera obiektów źródłowych złożonych autouzupełniania.
Autouzupełnianie złożonego obiektu źródłowego umożliwia łączenie wielu źródeł autouzupełniania w jedno źródło autouzupełniania.
IObjMgr *pom; hr = CoCreateInstance(CLSID_ACLMulti, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pom));Utwórz i ustaw opcje dla każdego ze źródeł autouzupełniania. Powtórz kroki 2 i 3 powyżej dla każdego źródła.
Podłącz każde źródło autouzupełniania do menedżera obiektów źródłowych.
hr = pom->Append(punkSource1); hr = pom->Append(punkSource2);Zainicjuj obiekt autouzupełniania.
Jest to takie samo jak krok 4 powyżej, z tą różnicą, że zamiast przekazać proste źródło autouzupełniania do IAutoComplete::Init, przekazujesz menedżera obiektów źródłowych złożonych.
hr = pac->Init(hwndEdit, pom, NULL, NULL);Ustaw opcje obiektu autouzupełniania. Jest to takie samo, jak krok 5 powyżej.
Zwolnij obiekty.
Tak jak w prostym przypadku, można zwolnić obiekty zaraz po zakończeniu ich używania, ale można je również zachować, aby zmienić opcje później.
pac->Release(); pom->Release(); // Release each individual source. punkSource1->Release(); punkSource2->Release();