Auf Englisch lesen

Freigeben über


Verwenden der Automatischen Vervollständigung des Eingabebereichs

In Windows Vista integriert der Tablet-PC-Eingabebereich neue AutoVervollständigen-Funktionen, mit denen die AutoVervollständigen-Liste einer Anwendung in Echtzeit aktualisiert werden kann, da die Freihandeingabe eines Benutzers im Eingabebereich erkannt wird. Darüber hinaus wird die Autovervollständigen-Liste der Anwendung an einem geeigneten Speicherort für Benutzer des Eingabebereichs positioniert. Ohne Die automatische Vervollständigung des Eingabebereichs ist die Verwendung von Autovervollständigen-Features im Eingabebereich ein schwieriger Prozess, da Benutzer jeweils ein Zeichen einfügen und den Eingabebereich verschieben müssen, um auf Vorschläge zur automatischen Vervollständigung zuzugreifen. Mit der Integration ist Autovervollständigen ein leistungsstarkes Tool für Tablet-PC-Benutzer, das die Eingabe von Text im Eingabebereich beschleunigt und erhöht.

Eingabebereich mit automatischer Vervollständigungsliste

Es gibt drei Optionen, wie eine Anwendung die Integration der Automatischen Vervollständigung des Eingabebereichs nutzen kann. Anwendungen, die autovervollständigen-Funktionen enthalten, die mithilfe von Shell AutoVervollständigen (über die IAutoComplete-Schnittstelle) oder .NET Framework AutoVervollständigen (über die AutoVervollständigeneMode-Enumeration) erstellt wurden, erhalten die Integration der Automatischen Vervollständigung des Eingabebereichs ohne Codeänderungen. Anwendungen, die benutzerdefinierte Textfelder für automatische Vervollständigung enthalten, können die Autovervollständigen-API des Eingabebereichs verwenden, um dieselbe Funktionalität zu erhalten.

In allen Fällen können Sie diese Änderungen an der AutoVervollständigen-Liste der Anwendung vornehmen, ohne die Benutzeroberfläche oder die Vorhersagelogik zu duplizieren oder zu ändern, die von einer Anwendung zum Generieren einer AutoVervollständigen-Liste verwendet wird. Die AutoVervollständigen-Liste wird weiterhin von der Anwendung gezeichnet, und der Inhalt der AutoVervollständigen-Liste ist identisch, als würde der Text direkt in das Bearbeitungsfeld eingegeben.

Die Integration der automatischen Vervollständigung des Eingabebereichs wird unter dem Windows Vista-Betriebssystem oder höheren Versionen unterstützt. Die Integration der automatischen Vervollständigung des Eingabebereichs ist ab Windows Vista in shell autovervollständigen und ab .NET Framework Version 3.0 in Windows Forms Entwicklung integriert. Während IAutoComplete und AutoCompleteMode beide unter früheren Versionen von Windows ausgeführt werden, wird die Integration der Automatischvervollständigung des Eingabebereichs unter Microsoft Windows XP Tablet PC Edition oder früheren Betriebssystemen nicht unterstützt. Wenn Sie die Automatische Vervollständigung des Eingabebereichs auf früheren Versionen von Tablet PC ausführen, rückgängig machen Anwendungen zum Vorintegrationsverhalten.

Gründe für die Integration von Anwendungs-Autovervollständigenlisten in den Eingabebereich

Die Integration der AutoVervollständigen-Liste einer Anwendung ermöglicht benutzern, die Text in ein Textfeld eingeben, das die Autovervollständigen-Funktion enthält, eine maximale Benutzerfreundlichkeit und Geschwindigkeit bei der Eingabe. Darüber hinaus erscheint eine Anwendung, die die Autovervollständigen-Integration des Eingabebereichs umfasst, sofort so, als würde sie mit dem Tablet-PC entwickelt, was die Anwendung für Tablet-PC-Benutzer attraktiver macht.

Interaktion des Eingabebereichs und der Liste der automatischen Vervollständigung ohne Integration

Verwenden des Eingabebereichs zum Eingeben von Text in ein Textfeld, das eine Liste der automatischen Vervollständigung enthält, aber nicht in den Eingabebereich integriert ist:

  1. Der Benutzer legt den Fokus im Textfeld und öffnet den Eingabebereich.
  2. Der Benutzer schreibt ein oder zwei Zeichen.
  3. Der Benutzer tippt auf Einfügen. Der Eingabebereich gibt den Text in das Textfeld der Anwendung ein. Die Autovervollständigen-Liste der Anwendung wird angezeigt und wird wahrscheinlich durch den Eingabebereich teilweise oder vollständig verdeckt.
  4. Der Benutzer zieht den Eingabebereich, um die Liste der automatischen Vervollständigung der Anwendung aufzudecken.
  5. Wenn der richtige Eintrag in der Liste Autovervollständigen enthalten ist, kann der Benutzer diesen Eintrag jetzt auswählen. Andernfalls muss der Benutzer die Schritte 2 und 3 wiederholen.

Dies ist eindeutig ein umständlicher Prozess. Die Erwartungen des Benutzers, wie eine Autovervollständigen-Liste funktionieren soll, sind gestrichelt, und ihre Fähigkeit, Aufgaben auszuführen, leidet.

Wie sich die Interaktion zwischen Eingabebereich und Automatisch vervollständigungsliste mit der Integration verbessert

Verwenden des Eingabebereichs zum Eingeben von Text in ein Textfeld, das eine AutoVervollständigen-Liste enthält, die in den Eingabebereich integriert ist:

  1. Der Benutzer legt den Fokus im Textfeld und öffnet den Eingabebereich.
  2. Der Benutzer schreibt ein oder zwei Zeichen. Die Autovervollständigen-Liste der Anwendung wird direkt oberhalb oder direkt unterhalb des Eingabebereichs angezeigt, wenn der Benutzer Text schreibt.
  3. Der Benutzer wählt den Eintrag aus der Liste AutoVervollständigen aus. der Eintrag wird direkt in das Textfeld der Anwendung eingefügt, oder der Benutzer wiederholt Schritt 2, bis der richtige Eintrag angezeigt wird.

Aufgrund der Integration wird die Autovervollständigen-Liste angezeigt und aktualisiert, während der Benutzer im Eingabebereich schreibt. Darüber hinaus ist die Liste so positioniert, dass der Benutzer während des Schreibens bequem auf sie zugreifen kann und nicht durch den Eingabebereich verdeckt wird. Wenn der Benutzer ein Element aus einer Liste der automatischen Vervollständigung auswählt, wird das Element direkt in das Texteingabefeld der Anwendung eingefügt, sodass der Benutzer den Schritt des Einfügens von Text aus dem Eingabebereich umgehen kann.

Eingabebereich mit Outlook Express AutoVervollständigen-Liste

Standardkomponenten für automatische Vervollständigung, die die Integration der Automatischvervollständigung im Eingabebereich enthalten

Sowohl IAutoComplete als auch AutoCompleteMode enthalten eine integrierte Integration von Autovervollständigen im Eingabebereich. Anwendungen, die eine dieser Standardkomponenten für die automatische Vervollständigung verwenden, können die Autovervollständigen-Funktionalität des Eingabebereichs mit wenig bis keinem zusätzlichen Aufwand nutzen. Während die Automatische Vervollständigung des Eingabebereichs nur unter Windows Vista oder neuen Versionen des Windows-Betriebssystems unterstützt wird, erhalten Anwendungen, die vor der Veröffentlichung von Windows Vista mit IAutoComplete erstellt wurden, automatisch die Integration der Eingabebereich-Autovervollständigung, wenn sie unter Windows Vista ausgeführt werden. Die folgenden Abschnitte enthalten weitere Informationen zu den spezifischen IAutoComplete - und AutoCompleteMode-Elementen, die die Autovervollständigen-Integration des Eingabebereichs enthalten.

Shell autovervollständigen mit Integration der Automatischen Vervollständigung des Eingabebereichs

Anwendungen, die IAutoComplete verwenden, erhalten die Integration der Automatischvervollständigung des Eingabebereichs kostenlos. Während die Shell AutoVervollständigen-APIs ab Windows 2000 enthalten sind, wird die Integration der Automatischen Vervollständigung des Eingabebereichs nur unter Windows Vista und neueren Versionen unterstützt. Anwendungen, die vor der Veröffentlichung von Windows Vista erstellt wurden und IAutoComplete verwenden, erhalten jedoch automatisch die Integration der Automatischen Vervollständigung des Eingabebereichs, wenn sie unter Windows Vista ausgeführt werden.

Um die Vorteile von Tablet AutoVervollständigen auf diese Weise nutzen zu können, müssen Sie das AutoVervollständigen-Objekt (CLSID_Autocomplete) verwenden. Wenn Sie autovervollständigen-Funktionen für URLs oder Dateinamen bereitstellen möchten, verwenden Sie die SHAutoComplete-Funktion , um das AutoVervollständigen-Objekt zu erstellen.

Zusätzlich zu IAutoComplete können Sie IAutoComplete2 oder IAutoCompleteDropDowns direkt implementieren und trotzdem automatisch die Integration der Automatischen Vervollständigung des Eingabebereichs erhalten.

Integration der automatischen Vervollständigung des Eingabebereichs mit .NET Framework Anwendungen

Ab .NET Framework 3.0 enthalten Windows Forms Textfelder autovervollständigen. Windows Forms Textfeld Autovervollständigen basiert auf shell autovervollständigen, was bedeutet, dass die Integration der Automatischen Vervollständigung des Eingabebereichs ebenfalls integriert ist. .NET Framework 3.0 wird in Windows-Editionen unterstützt, die vor Windows Vista veröffentlicht wurden. Da die Autovervollständigen-Integration des Eingabebereichs jedoch nur unter Windows Vista oder höheren Versionen unterstützt wird, funktioniert die Integration der Automatischen Vervollständigung des Eingabebereichs nur in einer .NET Framework 3.0-Anwendung, wenn sie unter Windows Vista oder höheren Versionen installiert ist.

Anwendungen, die die Autovervollständigen-Integration des Eingabebereichs in .NET Framework 3.0 nutzen möchten, müssen eine Windows Forms TextBox verwenden, wobei die AutoCompleteMode-Eigenschaft aktiviert ist. Sie müssen keine zusätzlichen Aufgaben ausführen, die über Windows Forms Autovervollständigen hinausgehen, um die Autovervollständigen-Integration des Eingabebereichs zu nutzen.

Direktes Verwenden von Autovervollständigen-APIs des Eingabebereichs

Entwickler von benutzerdefinierten Automatisch vervollständigen Textfelder müssen direkt mit den Autovervollständigen-APIs des Eingabebereichs arbeiten, um die verbesserte Texteingabeerfahrung zu erhalten, die die Integration der automatischen Vervollständigung in den Eingabebereich in ihren Anwendungen ermöglicht. Die Autovervollständigen-APIs des Eingabebereichs sind als Teil des Windows Vista-Betriebssystems und als Teil des Tablet Platform SDK, Version 1.9 oder höher, enthalten. Die Schnittstellen zum automatischen Vervollständigen des Eingabebereichs sind COM-basierte Schnittstellen.

Im folgenden Abschnitt wird das Arbeiten dieser Schnittstellen für eine C++-Anwendung ausführlich beschrieben. Diese COM-Schnittstellen können jedoch in den meisten Sprachen implementiert werden, einschließlich C#, durch die Verwendung von COM Interop.

Um die Autovervollständigen-Integration des Eingabebereichs in einem benutzerdefinierten Textfeld autovervollständigen zu implementieren, sind die beiden erforderlichen Schnittstellen die ITipAutocompleteProvider-Schnittstelle und die ITipAutocompleteClient-Schnittstelle. Die Definitionen für diese Schnittstellen finden Sie in TipAutoComplete.h und TipAutoComplete_i.c.

Zunächst muss eine Anwendung eine AutoComplete-Anbieterklasse definieren und instanziieren, die ITipAutocompleteProvider für jedes Texteingabefeld implementiert, das eine AutoVervollständigen-Liste enthält. Diese Klasse verwaltet die Anwendungsseite der AutoVervollständigen-Integration. Alle AutoVervollständigen-Anforderungen aus dem Eingabebereich werden vom AutoVervollständigen-Client über den AutoVervollständigen-Anbieter der Anwendung an die Anwendung gesendet. Der AutoVervollständigen-Anbieter der Anwendung muss Sowohl auf den HWND für die AutoVervollständigen-Liste der Anwendung als auch auf den HWIND für das zugeordnete Texteingabefeld zugreifen können. Darüber hinaus müssen die folgenden Methoden von ITipAutocompleteProvider implementiert werden:

  • ITipAutocompleteProvider::UpdatePendingText-Methode: Diese Methode wird vom AutoVervollständigen-Client verwendet, um die Anwendung des Texts zu benachrichtigen, den ein Benutzer in den Eingabebereich geschrieben hat. Beim Empfang dieser Benachrichtigung ist der Anbieter dafür verantwortlich, eine AutoVervollständigen-Liste zu generieren, als ob der Text in das Texteingabefeld der Anwendung eingegeben worden wäre. Die Zeichenfolge, die mithilfe der ITipAutocompleteProvider::UpdatePendingText-Methode an den Autovervollständigen-Anbieter übergeben wird, enthält nur den Text, der sich derzeit im Eingabebereich befindet. Wenn also zusätzlichen Text im Texteingabefeld vorhanden ist, liegt es in der Verantwortung des Anbieters, ihn ordnungsgemäß an den vom Client gesendeten Text anzufügen. Die von ITipAutocompleteProvider::UpdatePendingText-Methode übergebene Zeichenfolge sollte als Ersatz für die aktuelle Auswahl im Feld behandelt werden. Wenn keine aktuelle Auswahl vorhanden ist, sollte sie an der Position der aktuellen Einfügemarke platziert werden. Sobald die AutoVervollständigen-Liste generiert wurde, sollte der Anbieter die ITipAutocompleteProvider::Show-Methode aufrufen, die in TRUE übergeben wird, um die Liste autovervollständigen anzuzeigen. Die Anwendung sollte keine Aufrufe von UpdatePendingText zwischenspeichern, sondern jeden zusätzlichen Aufruf von UpdatePendingText als Abbruch des vorherigen Aufrufs behandeln, um zu vermeiden, dass eine veraltete Benutzeroberfläche für die AutoVervollständigen-Liste blinkt. Im folgenden Beispielcode werden diese Methoden veranschaulicht.

    HRESULT SampleProvider::UpdatePendingText(BSTR bstrPendingText)
    {
       //Discard previously cached pending text from Input Panel
       m_bstrPending.Empty();
        //Store the new pending text from Input Panel as m_bstrPending
    m_bstrPending = bstrPendingText;
    
        //Get the text from the field in two chunks. The characters to
    //the left of the selection and the characters to the right.
    CComBSTR bstrLeftContext = //Text to the left of the selection
            CComBSTR bstrRightContext = //Text to the right of the selection
    
    //Discard previously cached complete text
        m_bstrCompleteText.Empty();
        //Append to the field text from the left of the selection
        //the text from Input Panel and then append to that
        //the field text to the right of the selection
        m_bstrCompleteText.Append(bstrLeftContext);
        m_bstrCompleteText.Append(m_bstrPending);
        m_bstrCompleteText.Append(bstrRigtContext);
    
        //Update the app's AC list based on m_bstrCompleteText
        //...
    
        //Show the updated AC list by calling the provider's Show method
       Show(true);
       return S_OK;
    }
    
  • ITipAutocompleteProvider::Show-Methode: Diese Methode wird von UpdatePendingText aufgerufen, kann aber auch vom AutoVervollständigen-Client jederzeit aufgerufen werden. Nach Dem Empfang dieses Aufrufs muss der AutoVervollständigen-Anbieter den Autovervollständigen-Anbieter ausblenden oder anzeigen, wie im Parameter angegeben. Vor dem Anzeigen der Autovervollständigen-Liste wird erwartet, dass der Autovervollständigen-Anbieter den AutoVervollständigen-Client darüber informiert, wo die AutoVervollständigen-Liste positioniert werden soll. Weitere Informationen zum Positionieren der Autovervollständigen-Liste werden weiter unten in diesem Artikel angezeigt.

Als Nächstes sollte die Anwendung die AtL-Funktion CoCreateInstance (Active Template Library) verwenden, um eine instance der ITipAutocompleteClient-Schnittstelle mit der Klassen-ID zu erstellen, die als Prozessserver CLSID_TipAutoCompleteClient, und dann den Anbieter beim Client registrieren. Die ITipAutocompleteClient::AdviseProvider-Methode des Autovervollständigen-Clients registriert den Anbieter beim Client, damit der Client das AutoComplete-Anbieterobjekt der Anwendung aufrufen kann. Wenn tiptsf.dll im System nicht vorhanden ist, schlägt die CoCreateInstance-Funktion fehl und gibt REGDB_E_CLASSNOTREG zurück. An diesem Punkt kann die Anwendung ihr ITipAutocompleteProvider-Objekt verwerfen und so fortfahren, als ob der Eingabebereich nicht vorhanden wäre, da dies auf einem solchen System nicht der Fall ist.

Die Anwendung kann eine instance von ITipAutocompleteClient oder eine instance pro Textfeld erstellen. Die erste Option erfordert, dass der Anbieter jedes Mal, wenn der Fokus geändert wird, die Registrierung aufgehoben und registriert wird. Weitere Informationen zum Aufheben der Registrierung des Anbieters für automatische Vervollständigung finden Sie weiter unten in diesem Thema.

Beim Positionieren der AutoVervollständigen-Liste sind mehrere Schritte erforderlich, die zwischen dem Autovervollständigen-Anbieter (Anwendung) und dem AutoVervollständigen-Client (Eingabebereich) koordiniert werden müssen. Bevor die Liste AutoVervollständigen angezeigt wird, muss der Anbieter den Client darüber informieren, wo die AutoVervollständigen-Liste positioniert werden soll, entweder durch einen Aufruf der Show-Methode des Autovervollständigen-Anbieters oder aufgrund der Eingabe von Text über die Tastatur durch den Benutzer. Der Anbieter sollte die folgenden Schritte ausführen:

  • Verwenden Sie die ITipAutocompleteClient::RequestShowUI-Methode des Autovervollständigen-Clients, um zu bestimmen, ob der Eingabebereich bereit ist, um die Liste "AutoVervollständigen" anzuzeigen. RequestShowUI übernimmt den HWND-Parameter , der der HWND für das Listenfenster autovervollständigen ist, und die Methode gibt TRUE oder FALSE zurück, um anzugeben, ob es sich um den Zustand handelt, in dem die Autovervollständigen-Liste angezeigt werden kann. Wenn der Client FALSE zurückgibt, sollte der Anbieter nicht versuchen, die AutoVervollständigen-Liste anzuzeigen.

  • Rufen Sie RequestShowUI auf, um das Popup-Autovervollständigen-Listenfensterhandle festzulegen, bevor Sie die ITipAutocompleteClient::P referredRects-Methode aufrufen. Wenn dies nicht geschieht, wird beim Aufrufen von PreferredRects ein E_INVALIDARG Fehler verursacht.

  • Wenn RequestShowUITRUE zurückgibt, sollte der Anbieter das Standardbildschirmkoordinatenrechteck der AutoVervollständigen-Liste basierend auf der Position des Texteingabefelds berechnen und dann die ITipAutocompleteClient::P referredRects-Methode des AutoComplete-Clients aufrufen. Dadurch kann der AutoVervollständigen-Client das Rechteck anpassen, um zu vermeiden, dass sich die AutoVervollständigen-Liste mit dem Eingabebereich überlappt. Die PreferredRects-Methode akzeptiert vier Parameter:

    • RECT rcACList: Das Standardmäßige Bildschirmkoordinatenrechteck der AutoVervollständigen-Liste.
    • RECT rcField: Das Bildschirmkoordinatenrechteck des entsprechenden Texteingabefelds.
    • RECT *prcModifiedACList: Das angepasste Bildschirmkoordinatenrechteck für das AutoVervollständigen
    • BOOL *pfShowAbove: Dieser Parameter gibt dem Anbieter an, ob das prcModifiedACList-Rechteck die AutoVervollständigen-Liste oberhalb oder unterhalb des Eingabebereichs positioniert. Die Anwendung kann diese Informationen verwenden, um UI-Elemente wie Ziehpunkte und Bildlaufleisten richtig zu zeichnen. Der Anbieter sollte zunächst in der Richtung übergeben, in der die AutoVervollständigen-Liste relativ zum Texteingabefeld von rcACList positioniert wird. Der Client ändert pfShowAbove nicht, wenn prcModifiedACList gleich rcACList festgelegt wird.

    Verwenden Sie die Rückgabewerte der Argumente prcModifiedACList und pfShowAbove out, um das AutoVervollständigen-Listenfenster zu positionieren und anzuzeigen. Wenn der Eingabebereich nicht verwendet wird, gibt RequestShowUI immer TRUE zurück, und prcModifiedACList ist immer identisch mit rcACList. pfShowAbove ist ebenfalls unverändert, das Ergebnis ist, dass die Aufrufe keine Auswirkungen auf das Anwendungsverhalten haben. Der folgende Beispielcode veranschaulicht diese Vorgehensweisen.

HRESULT SampleProvider::Show(BOOL fShow)
{
    //Ask the AC client if it is OK to show the Autocomplete list.
    BOOL fAllowShowing = FALSE;
    m_spACClient->RequestShowUI(m_hWndList, &fAllowShowing);

    if (fShow && fAllowingShowing)
        {
            // Create the parameters required to call PreferredRects
            RECT rcField = //Rectangle for app's text field
            RECT rcACList = //Default rectangle for app's AC list
            RECT rcModifiedACList = {0, 0, 0, 0};
            BOOL fShowAbove = TRUE;

//Ask the AC client to modify the position of the AC list
m_spACClient->PreferredRects(&rcACList, &rcField,
&rcModifiedACList, &fShowAbove);

            //Show the Autocomplete UI at the modified preferred rectangle
            //from rcModifiedACList and the directional info provide by
//fShowAbove
            //...
        }
    else
        {
        //Hide the Autocomplete list and clean up
        //...
        }
    return S_OK;
}

Wenn der Benutzer ein Element in der AutoVervollständigen-Liste auswählt, muss der Anbieter zusätzlich zum Einfügen des markierten Elementtexts in das Texteingabefeld die ITipAutocompleteClient::UserSelection-Methode des Clients aufrufen. Der Eingabebereich verwendet diese Benachrichtigung, um den gesamten verbleibenden Text zu verwerfen, der noch nicht aus dem Eingabebereich eingefügt wurde.

Wenn der Anbieter nicht mehr benötigt wird, sollte die Verknüpfung des Anbieters mit dem AutoVervollständigen-Client aufgehoben werden, indem die ITipAutocompleteClient::UnadviseProvider-Methode des AutoVervollständigen-Clients aufgerufen wird, um die Registrierung des Anbieters aufzuheben. Möglicherweise muss die Registrierung des Anbieters aus einem von zwei Gründen aufgehoben werden: weil das Texteingabefeld, dem der Anbieter zugeordnet ist, zerstört wurde, oder weil die Anwendung anstelle eines pro Texteingabefeld nur einen AutoVervollständigen-Client erstellt. In diesem instance muss die Registrierung des Anbieters bei jedem Wechsel des Fokus vom Textfeld aufgehoben werden.

Zusammenfassung

Die Integration der automatischen Vervollständigung des Eingabebereichs ist ein leistungsstarkes Tool zur Verbesserung der Benutzererfahrung in Windows-Anwendungen, die AutoVervollständigen-Listen auf Tablet-PCs enthalten. Ohne Integration müssen Benutzer des Eingabebereichs einen langwierigen Prozess durchlaufen, bei dem Text ein Zeichen nach dem anderen eingefügt und der Eingabebereich neu positioniert wird, um autovervollständigen zu können. Mit der Integration werden AutoVervollständigen-Listen an einem bequemen Ort angezeigt, an dem Benutzer freihand im Eingabebereich angezeigt werden, was sowohl die Geschwindigkeit als auch die Einfachheit der Texteingabe erhöht. In Anwendungen, die autovervollständigen-Funktionen enthalten, die auf Shell AutoVervollständigen oder .NET Framework 3.0 AutoVervollständigen basieren, ist die Integration von AutoVervollständigen im Eingabebereich ein kostenloses und überzeugendes Feature. Darüber hinaus werden einfache COM-basierte Schnittstellen bereitgestellt, um die gleiche integrierte Oberfläche für Anwendungen zu ermöglichen, die benutzerdefinierte AutoVervollständigen-Steuerelemente verwenden.

Texteingabebereichsreferenz