Manuelles Aktivieren der automatischen Vervollständigung
Um eine 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. Die automatische Vervollständigung kann auf folgende Weise manuell aktiviert werden.
Instructions
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 ausgelassen.
Erstellen Sie das AutoVervollständigen-Objekt.
IAutoComplete *pac; HRESULT hr = CoCreateInstance(CLSID_AutoComplete, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pac));Erstellen Sie die AutoVervollständigen-Quelle. Sie können eine vordefinierte AutoVervollständigen-Quelle verwenden oder eine eigene benutzerdefinierte Quelle schreiben.
Im folgenden Code wird eine der vordefinierten AutoVervollständigen-Quellen verwendet.
IUnknown *punkSource; hr = CoCreateInstance(CLSID_ACListISF, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&punkSource));Im folgenden Code wird eine benutzerdefinierte AutoVervollständigen-Quelle verwendet. Sie können ihre eigene AutoVervollständigen-Quelle schreiben, indem Sie ein -Objekt implementieren, das die IEnumString-Schnittstelle verfügbar macht. Das -Objekt kann optional auch die Schnittstellen ODIList und ODIList2 implementieren.
CCustomAutoCompleteSource *pcacs = new CCustomAutoCompleteSource(); hr = pcacs->QueryInterface(IID_PPV_ARGS(&punkSource)); if(SUCCEEDED(hr)) { // ... } pcacs->Release();Legen Sie die Optionen für die AutoVervollständigen-Quelle fest (optional).
Sie können das Verhalten der Quelle für die automatische Vervollständigung anpassen, indem Sie deren Optionen festlegen, wenn die Quelle die LIZList2-Schnittstelle verfügbar macht. Wenn Sie die vordefinierten AutoVervollständigen-Quellen verwenden, exportiert nur CLSID _ ACListISF LIZList2. Eine vollständige Liste der Optionen und deren Werte finden Sie unter CMDLETList2::SetOptions.
IACList2 *pal2; hr = punkSource->QueryInterface(IID_PPV_ARGS(&pal2)); if (SUCCEEDED(hr)) { hr = pal2->SetOptions(ACLO_FILESYSONLY); pal2->Release(); }Initialisieren Sie das AutoVervollständigen-Objekt.
In diesem Beispiel ist hwndEdit das Handle des Bearbeitungssteuerungsfensters, für das die automatische Vervollständigung aktiviert werden soll. Eine Beschreibung der letzten beiden nicht verwendeten Parameter finden Sie unter IAutoComplete::Init.
hr = pac->Init(hwndEdit, punkSource, NULL, NULL);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 für CMDLETList2::SetOptions.
IAutoComplete2 *pac2; hr = pac->QueryInterface(IID_PPV_ARGS(&pac2)); if (SUCCEEDED(hr)) { hr = pac2->SetOptions(ACO_AUTOSUGGEST); pac2->Release(); }Geben Sie die Objekte frei.
Hinweis
Das AutoVervollständigen-Objekt bleibt auch nach der Freigabe an das Bearbeitungssteuerobjekt angefügt. Wenn Sie zu einem späteren Zeitpunkt auf diese Objekte zugreifen möchten , z. B. wenn Sie die Optionen für die automatische Vervollständigung zu einem späteren Zeitpunkt ändern möchten, ist es an diesem Punkt nicht erforderlich, sie frei zu geben.
punkSource->Release(); pac->Release();
Erstellen eines zusammengesetzten AutoVervollständigen-Objekts
Ein zusammengesetztes AutoVervollständigen-Objekt stimmt mit Zeichenfolgen aus mehreren Quellen ab. Die Adressleiste Windows Internet Explorer verwendet z. B. ein zusammengesetztes AutoVervollständigen-Objekt, da der Benutzer möglicherweise mit der Eingabe des Namens einer Datei oder URL beginnt. Die meisten Schritte zum Erstellen eines zusammengesetzten AutoVervollständigen-Objekts sind identisch mit den Schritten unter "Erstellen eines einfachen AutoVervollständigen-Objekts". Diese Schritte werden als solche angegeben.
Erstellen Sie das AutoVervollständigen-Objekt. Dies ist identisch mit Schritt 1 oben.
Erstellen Sie den Verbundquellenobjekt-Manager für die automatische Vervollständigung.
Das zusammengesetzte AutoVervollständigen-Quellobjekt ermöglicht die Kombination mehrerer AutoVervollständigen-Quellen zu einer einzelnen AutoVervollständigen-Quelle.
IObjMgr *pom; hr = CoCreateInstance(CLSID_ACLMulti, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pom));Erstellen und festlegen Sie Optionen für die einzelnen AutoVervollständigen-Quellen. Wiederholen Sie die oben genannten Schritte 2 und 3 für jede Quelle.
Fügen Sie jede AutoVervollständigen-Quelle an den Quellobjekt-Manager an.
hr = pom->Append(punkSource1); hr = pom->Append(punkSource2);Initialisieren Sie das AutoVervollständigen-Objekt.
Dies ist identisch mit Schritt 4 oben, mit der Ausnahme, dass Sie den Verbundquellenobjekt-Manager übergeben, anstatt die einfache AutoVervollständigen-Quelle an IAutoComplete::Initzu übergeben.
hr = pac->Init(hwndEdit, pom, NULL, NULL);Legen Sie die Optionen des AutoVervollständigen-Objekts fest. Dies ist identisch mit Schritt 5 oben.
Geben Sie die Objekte frei.
Wie im einfachen Fall können Sie die Objekte veröffentlichen, sobald Sie sie nicht mehr verwenden. Sie können sie jedoch auch beibehalten, um die Optionen später zu ändern.
pac->Release(); pom->Release(); // Release each individual source. punkSource1->Release(); punkSource2->Release();