Udostępnij przez


Jak włączyć autouzupełnianie ręcznie

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.

  1. Utwórz obiekt autouzupełniania.

    IAutoComplete *pac;
    
    HRESULT hr = CoCreateInstance(CLSID_AutoComplete, 
                                    NULL, 
                                  CLSCTX_INPROC_SERVER,
                                  IID_PPV_ARGS(&pac));
    
  2. 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();
    
  3. 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();
    }
    
  4. 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);
    
  5. 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();
    }
    
  6. 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.

  1. Utwórz obiekt autouzupełniania. Jest to takie samo, jak krok 1 powyżej.

  2. 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));
    
  3. 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.

  4. 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);
    
  5. 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);
    
  6. Ustaw opcje obiektu autouzupełniania. Jest to takie samo, jak krok 5 powyżej.

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