Freigeben über


Manuelles Aktivieren der automatischen Vervollständigung

Um detailliertere Kontrolle über das AutoVervollständigen-Verhalten zu erhalten oder eine benutzerdefinierte Quelle von AutoVervollständigen-Zeichenfolgen hinzuzufügen, müssen Sie das AutoVervollständigen-Objekt selbst verwalten. Sie können die automatische Vervollständigung auf folgende Weise manuell aktivieren.

Anweisungen

Erstellen eines einfachen AutoVervollständigen-Objekts

Die folgenden Schritte zeigen, wie Sie ein einfaches AutoVervollständigen-Objekt erstellen und initialisieren. Ein einfaches AutoVervollständigen-Objekt schließt Zeichenfolgen aus einer einzelnen Quelle ab. Die Fehlerüberprüfung wurde in diesem Beispiel absichtlich weggelassen.

  1. Erstellen Sie das AutoVervollständigen-Objekt.

    IAutoComplete *pac;
    
    HRESULT hr = CoCreateInstance(CLSID_AutoComplete, 
                                    NULL, 
                                  CLSCTX_INPROC_SERVER,
                                  IID_PPV_ARGS(&pac));
    
  2. Erstellen Sie die AutoVervollständigen-Quelle. Sie können eine vordefinierte AutoVervollständigen-Quelle verwenden oder Eine eigene benutzerdefinierte Quelle schreiben.

    Der folgende Code verwendet eine der vordefinierten AutoVervollständigen-Quellen.

    IUnknown *punkSource;
    
    hr = CoCreateInstance(CLSID_ACListISF, 
                          NULL, 
                          CLSCTX_INPROC_SERVER,
                          IID_PPV_ARGS(&punkSource));
    

    Der folgende Code verwendet eine benutzerdefinierte AutoVervollständigen-Quelle. Sie können Eine eigene AutoVervollständigen-Quelle schreiben, indem Sie ein -Objekt implementieren, das die IEnumString-Schnittstelle verfügbar macht. Das -Objekt kann optional auch die Schnittstellen IACList und IACList2 implementieren.

    CCustomAutoCompleteSource *pcacs = new CCustomAutoCompleteSource();
    
    hr = pcacs->QueryInterface(IID_PPV_ARGS(&punkSource));
    if(SUCCEEDED(hr))
    {
        // ...
    }
    
    pcacs->Release();
    
  3. Legen Sie die Optionen für die AutoVervollständigen-Quelle fest (optional).

    Sie können das Verhalten der AutoVervollständigen-Quelle anpassen, indem Sie deren Optionen festlegen, wenn die Quelle die IACList2-Schnittstelle verfügbar macht. Wenn Sie die vordefinierten AutoVervollständigen-Quellen verwenden, exportiert nur CLSID_ACListISF IACList2. Eine vollständige Liste der Optionen und deren Werte finden Sie unter IACList2::SetOptions.

    IACList2 *pal2;
    
    hr = punkSource->QueryInterface(IID_PPV_ARGS(&pal2));
    if (SUCCEEDED(hr))
    {
        hr = pal2->SetOptions(ACLO_FILESYSONLY);
        pal2->Release();
    }
    
  4. Initialisieren Sie das AutoVervollständigen-Objekt.

    In diesem Beispiel ist hwndEdit das Handle des Bearbeitungssteuerelementfensters, für das autoVervollständigen aktiviert werden soll. Eine Beschreibung der letzten beiden nicht verwendeten Parameter finden Sie unter IAutoComplete::Init .

    hr = pac->Init(hwndEdit, punkSource, NULL, NULL);
    
  5. Legen Sie die Optionen des AutoVervollständigen-Objekts fest (optional).

    Sie können das Verhalten des AutoVervollständigen-Objekts anpassen, indem Sie dessen Optionen festlegen. Eine vollständige Liste der Optionen und deren Werte finden Sie in der Dokumentation zu IACList2::SetOptions.

    IAutoComplete2 *pac2;
    
    hr = pac->QueryInterface(IID_PPV_ARGS(&pac2));
    
    if (SUCCEEDED(hr))
    {
        hr = pac2->SetOptions(ACO_AUTOSUGGEST);
        pac2->Release();
    }
    
  6. Lassen Sie die -Objekte los.

    Hinweis

    Das AutoVervollständigen-Objekt bleibt an das Bearbeitungssteuerelement angefügt, auch nachdem Sie es freigegeben haben. Wenn Sie voraussehen, dass später auf diese Objekte zugegriffen werden muss, z. B. wenn Sie die Optionen für die automatische Vervollständigung zu einem späteren Zeitpunkt ändern möchten, ist es nicht erforderlich, dass Sie sie an diesem Punkt freigeben.

     

    punkSource->Release();
    pac->Release();
    

Erstellen eines zusammengesetzten AutoVervollständigen-Objekts

Ein zusammengesetztes AutoVervollständigen-Objekt wird mit Zeichenfolgen aus mehreren Quellen abgegleicht. Beispielsweise verwendet die Adressleiste von Windows Internet Explorer ein zusammengesetztes AutoVervollständigen-Objekt, da der Benutzer möglicherweise mit der Eingabe des Namens einer Datei oder einer URL beginnt. Die meisten Schritte zum Erstellen eines zusammengesetzten AutoVervollständigen-Objekts sind identisch mit den Schritten in "Erstellen eines einfachen AutoVervollständigen-Objekts". Diese Schritte werden als solche angegeben.

  1. Erstellen Sie das AutoVervollständigen-Objekt. Dies entspricht Schritt 1 oben.

  2. Erstellen Sie den AutoVervollständigen-Verbundquellobjekt-Manager.

    Das autoVervollständigen-Verbundquellobjekt ermöglicht die Kombination mehrerer AutoVervollständigen-Quellen in einer einzelnen AutoVervollständigen-Quelle.

    IObjMgr *pom;
    
    hr = CoCreateInstance(CLSID_ACLMulti, 
                          NULL, 
                          CLSCTX_INPROC_SERVER,
                          IID_PPV_ARGS(&pom));
    
  3. Erstellen und Festlegen von Optionen für jede der Automatischen Vervollständigungsquellen. Wiederholen Sie die Schritte 2 und 3 oben für jede Quelle.

  4. Fügen Sie jede AutoVervollständigen-Quelle an den Quellobjekt-Manager an.

    hr = pom->Append(punkSource1);
    hr = pom->Append(punkSource2);
    
  5. Initialisieren Sie das AutoVervollständigen-Objekt.

    Dies ist identisch mit Schritt 4 oben, mit dem Unterschied, dass Sie anstelle der einfachen AutoVervollständigen-Quelle an IAutoComplete::Init den zusammengesetzten Quellobjekt-Manager übergeben.

    hr = pac->Init(hwndEdit, pom, NULL, NULL);
    
  6. Legen Sie die Optionen des AutoVervollständigen-Objekts fest. Dies entspricht Schritt 5 oben.

  7. Lassen Sie die -Objekte los.

    Wie im einfachen Fall können Sie die Objekte freigeben, sobald Sie mit der Verwendung fertig sind, aber Sie können sie auch beibehalten, um die Optionen später zu ändern.

    pac->Release();
    pom->Release();
    
    // Release each individual source.
    punkSource1->Release(); 
    punkSource2->Release();