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 in das Adressbearbeitungssteuerelement einzugeben, das in die Windows Internet Explorer Symbolleiste eingebettet ist, erweitert die automatische Vervollständigung die Zeichenfolge in mindestens eine vollständige URL-Option, die mit der vorhandenen Teilzeichenfolge konsistent ist. Eine partielle URL-Zeichenfolge wie "mic" kann auf " " oder " " erweitert https://www.microsoft.com https://www.microsoft.com/windows werden. 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.
Hinzufügen von AutoVervollständigen-Funktionen zu Ihrer Anwendung
Eine Anwendung kann einem Bearbeitungssteuerelement funktionen für die automatische Vervollständigung auf zwei Arten 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 How To Enable AutoComplete Manually (Manuelles Aktivieren der automatischen Vervollständigung).
AutoVervollständigen-Modi
Bei Verwendung von IAutoCompletekann die vollständige Zeichenfolge in zwei Modi angezeigt werden: autoappend und autosuggest. Die Modi sind unabhängig. Sie können entweder oder beides aktivieren. Rufen Sie IAutoComplete2::SetOptionsauf, um den Modus anzugeben.
-
AutoAppend
-
Im AutoAppend-Modus fügt die automatische Vervollständigung den Rest der wahrscheinlichsten Möglichenzeichenfolge an die vorhandenen Zeichen an, wobei die angefügten Zeichen hervorgehoben werden. Wenn der Benutzer weiterhin Zeichen eingibt, wird er 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 restlichen 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, basierend auf der größeren Teilzeichenfolge eine neue Kandidatenzeichenfolge zu generieren, und fügt den Rest der neuen Kandidatenzeichenfolge an die aktuelle Teilzeichenfolge an. Wenn keine Kandidatenzeichenfolge gefunden werden kann, werden nur die typisierten 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 automatischeUggeste zeigt die automatische Vervollständigung eine Dropdownliste mit mindestens einer vorgeschlagenen vollständigen Zeichenfolge unterhalb des Bearbeitungssteuerelements an. Der Benutzer kann eine der vorgeschlagenen Zeichenfolgen auswählen oder die Eingabe fortsetzen. Während die Eingabe fortschreitet, kann die Dropdownliste basierend auf der aktuellen Teilzeichenfolge geändert werden. Wenn Sie das ACO _ SEARCH-Flag in IAutoComplete2::SetOptionsfestlegen, bietet autocomplete eine Option am unteren Rand der Dropdownliste, um nach der aktuellen Teilzeichenfolge zu suchen. 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.
Verwenden vordefinierter AutoVervollständigen-Quellen
Die automatische Vervollständigung hängt davon ab, dass sie über eine Quelle verfügt, die Zeichenfolgen bereitstellt, die mit der Teilzeichenfolge des Benutzers übereinstimmen. Sie haben die Möglichkeit, eine benutzerdefinierte AutoVervollständigen-Quelle bereitzustellen, aber mehrere der gängigsten 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 Situationen, in denen Sie die Schnittstellenzeiger auf die verschiedenen Objekte, die an der automatischen Vervollständigung beteiligt sind, beibehalten möchten, anstatt die Ressourcen sofort freizulassen. Dies geschieht insbesondere, wenn Sie das AutoVervollständigen-Verhalten dynamisch anpassen möchten. Die häufigste Instanz davon tritt auf, wenn das CLSID _ ACListISF-Objekt verwendet wird, das automatisch aus dem Shellnamespace vervollständigt wird und die Option (ACLO _ CURRENTDIR) zum Auflisten aus dem aktuellen Verzeichnis hat. Wenn Sie beispielsweise zu einem neuen Ordner navigieren, ändert Internet Explorer das aktuelle Verzeichnis der Adressleiste. Daher müssen die Einstellungen dynamisch geändert werden. Es gibt zwei Möglichkeiten, das Verzeichnis anzugeben, das das _ CLSID-ACListISF-Objekt als aktuelles Verzeichnis behandeln soll:
- IPersistFolder gibt das Verzeichnis über eine ITEMIDLISTan.
- ICurrentWorkingDirectory gibt das Verzeichnis über eine Pfadzeichenfolge an.
Gehen Sie im Folgenden davon aus, dass pal ein Zeiger auf die LIAList-Schnittstelle eines CLSID-ACListISF-Objekts _ ist:
Verwenden von IPersistFolder:
Um dem CLSID _ ACListISF-Objekt mitzuteilen, dass eine bestimmte ITEMIDLIST als das aktuelle 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 vorlagenisierte 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-Objekt einen Pfad als aktuelles Verzeichnis zu geben, 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(); }