Verwenden von AutoVervollständigen
Die automatische Vervollständigung erweitert Zeichenfolgen, die teilweise in ein Bearbeitungssteuerelement eingegeben wurden, in vollständige Zeichenfolgen. Wenn ein Benutzer beispielsweise beginnt, eine URL im Steuerelement Adressbearbeitung einzugeben, das in die Symbolleiste von Windows Internet Explorer eingebettet ist, erweitert die automatische Vervollständigung die Zeichenfolge in eine oder mehrere vollständige URL-Optionen, die mit der vorhandenen Teilzeichenfolge konsistent sind. Eine partielle URL-Zeichenfolge wie "mic" kann zu "https://www.microsoft.com" oder "https://www.microsoft.com/windows". Die automatische Vervollständigung wird in der Regel mit Bearbeitungssteuerelementen oder mit Steuerelementen verwendet, die über ein eingebettetes Bearbeitungssteuerelement verfügen, z. B. das ComboBoxEx-Steuerelement .
Eine Anwendung kann einem Bearbeitungssteuerelement auf zwei Arten AutoVervollständigen-Funktionen hinzufügen:
- SHAutoComplete ist eine einfache Funktion, die einen Dateipfad oder eine URL automatisch vervollständigen kann.
- Die IAutoComplete-Schnittstelle wird vom AutoVervollständigen-Objekt (CLSID_AutoComplete) verfügbar gemacht. Es ermöglicht Anwendungen, das Objekt zu initialisieren, zu aktivieren und zu deaktivieren. IAutoComplete ermöglicht mehr Kontrolle über AutoVervollständigen-Quellen, einschließlich der Möglichkeit, eine benutzerdefinierte Quelle hinzuzufügen. Im weiteren Verlauf dieses Themas wird die Verwendung von IAutoComplete erläutert. Spezifische Verwendungsbeispiele finden Sie unter Manuelles Aktivieren der Automatischen Vervollständigung .
Wenn Sie IAutoComplete verwenden, kann die automatische Vervollständigung die abgeschlossene Zeichenfolge in zwei Modi anzeigen: autoappend und autosuggest. Die Modi sind unabhängig; Sie können entweder oder beides aktivieren. Um den Modus anzugeben, rufen Sie IAutoComplete2::SetOptions auf.
-
Autoappend
-
Im AutoAppend-Modus fügt autovervollständigen den Rest der wahrscheinlichsten Kandidatenzeichenfolge an die vorhandenen Zeichen an, wobei die angefügten Zeichen hervorgehoben werden. Wenn der Benutzer weiterhin Zeichen eingibt, werden diese der vorhandenen Teilzeichenfolge hinzugefügt. Wenn der Benutzer ein Zeichen hinzufügt, das mit dem nächsten hervorgehobenen Zeichen identisch ist, wird die Hervorhebung für dieses Zeichen deaktiviert. Die übrigen Zeichen werden weiterhin hervorgehoben. Wenn der Benutzer ein Zeichen hinzufügt, das nicht mit dem nächsten hervorgehobenen Zeichen übereinstimmt, versucht die automatische Vervollständigung, eine neue Kandidatenzeichenfolge basierend auf der größeren Teilzeichenfolge zu generieren, und fügt den Rest der neuen Kandidatenzeichenfolge an die aktuelle Teilzeichenfolge an. Wenn keine Kandidatenzeichenfolge gefunden werden kann, werden nur die eingegebenen Zeichen angezeigt, und das Bearbeitungsfeld verhält sich wie ohne automatische Vervollständigung. Dieser Prozess wird fortgesetzt, bis der Benutzer eine Zeichenfolge akzeptiert.
-
Autosuggest
-
Im Modus für die automatische Erfassung wird unter dem Bearbeitungssteuerelement eine Dropdownliste mit einer oder mehreren vorgeschlagenen vollständigen Zeichenfolgen angezeigt. Der Benutzer kann eine der vorgeschlagenen Zeichenfolgen auswählen oder mit der Eingabe fortfahren. Während der Eingabe kann die Dropdownliste basierend auf der aktuellen Teilzeichenfolge geändert werden. Wenn Sie das flag ACO_SEARCH in IAutoComplete2::SetOptions festlegen, bietet autovervollständigen am ende der Dropdownliste eine Option zum Suchen nach der aktuellen Teilzeichenfolge. Diese Option wird auch dann angezeigt, wenn keine vorgeschlagenen Zeichenfolgen vorhanden sind. Wenn der Benutzer die Suchoption auswählt, sollte Ihre Anwendung eine Suchmaschine starten, um den Benutzer zu unterstützen.
Die automatische Vervollständigung hängt von einer Quelle ab, die Zeichenfolgen bereitstellt, die mit der partiellen Zeichenfolge des Benutzers abgeglichen werden. Sie haben die Möglichkeit, eine benutzerdefinierte AutoVervollständigen-Quelle bereitzustellen, aber einige der am häufigsten verwendeten Quellen werden vom System bereitgestellt.
-
CLSID_ACLHistory
-
Eine AutoVervollständigen-Quelle, die mit der URL-Liste in der Verlaufsliste des Benutzers übereinstimmt.
-
CLSID_ACLMRU
-
Eine AutoVervollständigen-Quelle, die mit der URL-Liste in der Liste Zuletzt verwendet des Benutzers übereinstimmt.
-
CLSID_ACListISF
-
Eine AutoVervollständigen-Quelle, die mit Elementen im Shellnamespace übereinstimmt: Dateien auf dem Computer des Benutzers sowie Elemente in virtuellen Ordnern wie Systemsteuerung.
Es gibt Fälle, in denen Sie die Schnittstellenzeiger auf die verschiedenen Objekte beibehalten möchten, die an der automatischen Vervollständigung beteiligt sind, anstatt die Ressourcen sofort freizugeben. Dies geschieht insbesondere, wenn Sie das AutoVervollständigen-Verhalten dynamisch anpassen möchten. Die häufigste instance tritt auf, wenn das CLSID_ACListISF-Objekt verwendet wird, das automatisch aus dem Shell-Namespace vervollständigt und die Option (ACLO_CURRENTDIR) hat, auch aus dem aktuellen Verzeichnis aufzulisten. Wenn Sie beispielsweise zu einem neuen Ordner navigieren, ändert internet Explorer das aktuelle Verzeichnis der Adressleiste, sodass die Einstellungen dynamisch geändert werden müssen. Es gibt zwei Möglichkeiten, das Verzeichnis anzugeben, das vom CLSID_ACListISF-Objekt als aktuelles Verzeichnis behandelt werden soll:
- IPersistFolder gibt das Verzeichnis über eine ITEMIDLIST an.
- ICurrentWorkingDirectory gibt das Verzeichnis über eine Pfadzeichenfolge an.
Im Folgenden wird davon ausgegangen, dass pal ein Zeiger auf die IACList-Schnittstelle eines CLSID_ACListISF-Objekts ist:
Verwenden von IPersistFolder:
Um dem CLSID_ACListISF-Objekts mitzuteilen, dass eine bestimmte ITEMIDLIST als aktuelles Verzeichnis behandelt werden soll, können Sie die IPersistFolder-Schnittstelle des Objekts verwenden. Da eine ITEMIDLIST auf einen virtuellen Ordner verweisen kann, ist diese Methode flexibler als die Verwendung von ICurrentWorkingDirectory.
Beachten Sie, dass in den folgenden Beispielen die templatisierte QueryInterface verwendet wird, die eine vereinfachte Parameterliste ermöglicht.
IPersistFolder *ppf; hr = pal2->QueryInterface(IID_PPV_ARGS(&ppf)); if (SUCCEEDED(hr)) { hr = ppf->Initialize(pidlCurrentDirectory); ppf->Release(); }
Verwenden von ICurrentWorkingDirectory:
Um dem CLSID_ACListISF-Objekts einen Pfad als aktuelles Verzeichnis zuzuweisen, können Sie die ICurrentWorkingDirectory-Schnittstelle des Objekts verwenden.
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(); }