Compartir a través de


Usar autocompletar del panel de entrada

En Windows Vista, el Panel de entrada de pc tableta integra nuevas funcionalidades de Autocompletar que permiten que la lista autocompletar de una aplicación se actualice en tiempo real, ya que la entrada manuscrita de un usuario se reconoce en el Panel de entrada. Además, la lista Autocompletar de la aplicación se coloca en una ubicación cómoda para los usuarios del Panel de entrada. Sin autocompletar del panel de entrada, el uso de características de Autocompletar con el Panel de entrada es un proceso difícil, lo que requiere que los usuarios inserten un carácter a la vez y muevan el Panel de entrada para acceder a las sugerencias de Autocompletar. Con la integración, Autocompletar es una herramienta eficaz para los usuarios de Tablet PC que acelera y aumenta la facilidad de escribir texto con el Panel de entrada.

panel de entrada con lista de autocompletar de ie

Hay tres opciones para cómo una aplicación puede aprovechar las ventajas de la integración de Autocompletar del panel de entrada. Las aplicaciones que contienen la funcionalidad autocompletar creada mediante La función Autocompletar de Shell (a través de la interfaz IAutoComplete ) o autocompletar de .NET Framework (mediante la enumeración AutoCompleteMode ) reciben la integración autocompletar del Panel de entrada sin necesidad de cambios en el código. Las aplicaciones que incluyen campos de texto autocompletar personalizados pueden usar la API autocompletar del panel de entrada para obtener la misma funcionalidad.

En todos los casos, puede realizar estas modificaciones en la lista Autocompletar de la aplicación sin duplicar ni modificar la interfaz de usuario o la lógica de predicción usada por una aplicación para generar una lista autocompletar. La lista Autocompletar sigue siendo propietaria dibujada por la aplicación y el contenido de la lista Autocompletar es el mismo que si el texto se hubiera escrito directamente en el campo de edición.

La integración de Autocompletar del panel de entrada es compatible con el sistema operativo Windows Vista o versiones posteriores. La integración de Autocompletar del panel de entrada está integrada en Shell Autocompletar a partir de Windows Vista y en Windows Forms desarrollo a partir de la versión 3.0 de .NET Framework. Aunque IAutoComplete y AutoCompleteMode se ejecutan en versiones anteriores de Windows, la integración de Autocompletar del Panel de entrada no se admite en Microsoft Windows XP Tablet PC Edition o en sistemas operativos anteriores. Si ejecuta Autocompletar del Panel de entrada en versiones anteriores de Tablet PC, las aplicaciones se revierten al comportamiento previo a la integración.

Motivos para integrar listas de autocompletar de aplicaciones con el panel de entrada

La integración de la lista autocompletar de una aplicación permite la máxima facilidad y velocidad de entrada para los usuarios que escriben texto en un campo de texto que incluye la funcionalidad Autocompletar. Además, una aplicación que incluye la integración de Autocompletar del Panel de entrada aparece inmediatamente como si se desarrollara con el pc tablet en mente, haciendo que la aplicación sea más atractiva para los usuarios de tablet PC.

Cómo interactúan el panel de entrada y la lista de autocompletar sin integración

Usar el Panel de entrada para escribir texto en un campo de texto que incluye una lista Autocompletar, pero que no está integrada con el Panel de entrada:

  1. El usuario coloca el foco en el campo de texto y abre el Panel de entrada.
  2. El usuario escribe uno o dos caracteres.
  3. El usuario pulsa Insertar. El Panel de entrada escribe el texto en el campo de texto de la aplicación. Aparece la lista Autocompletar de la aplicación y es más probable que el Panel de entrada o lo oculte completamente.
  4. El usuario arrastra el Panel de entrada para descubrir la lista Autocompletar de la aplicación.
  5. Suponiendo que la entrada correcta se incluye en la lista Autocompletar, el usuario ahora puede seleccionar esa entrada; de lo contrario, el usuario debe repetir los pasos 2 y 3.

Esto es claramente un proceso complicado. Las expectativas del usuario de cómo debe funcionar una lista autocompletar se deben discontinuar y su capacidad de realizar tareas sufre.

Cómo mejora la interacción de panel de entrada y lista de autocompletar con la integración

Usar el Panel de entrada para escribir texto en un campo de texto que incluye una lista autocompletar integrada con el Panel de entrada:

  1. El usuario coloca el foco en el campo de texto y abre el Panel de entrada.
  2. El usuario escribe uno o dos caracteres. La lista Autocompletar de la aplicación aparece directamente encima o directamente debajo del Panel de entrada a medida que el usuario escribe texto.
  3. El usuario selecciona la entrada de la lista Autocompletar; la entrada se inserta directamente en el campo de texto de la aplicación o el usuario repite el paso 2 hasta que aparezca la entrada correcta.

Debido a la integración, aparece la lista Autocompletar y se actualiza mientras el usuario escribe en el Panel de entrada. Además, la lista se coloca para que sea conveniente que el usuario acceda mientras escribe y no oculta el Panel de entrada. Por último, cuando el usuario selecciona un elemento de una lista Autocompletar, el elemento se inserta directamente en el campo de entrada de texto de la aplicación, lo que permite al usuario omitir el paso de inserción de texto desde el Panel de entrada.

panel de entrada con la lista de autocompletar rápida de Outlook

Componentes de autocompletar estándar que incluyen integración de autocompletar del panel de entrada

IAutoComplete y AutoCompleteMode incluyen la integración integrada de Autocompletar del panel de entrada. Las aplicaciones que usan cualquiera de estos componentes de Autocompletar estándar pueden aprovechar las ventajas de la funcionalidad Autocompletar del panel de entrada con poco o ningún trabajo adicional. Además, aunque la función Autocompletar del Panel de entrada solo se admite en Windows Vista o en nuevas versiones del sistema operativo Windows, las aplicaciones compiladas con IAutoComplete antes de la versión de Windows Vista obtienen la integración de Autocompletar del Panel de entrada automáticamente cuando se ejecutan en Windows Vista. Las secciones siguientes contienen más información sobre los elementos IAutoComplete y AutoCompleteMode específicos que incluyen la integración de Autocompletar del Panel de entrada.

Autocompletar de Shell con integración de autocompletar del panel de entrada

Las aplicaciones que usan IAutoComplete obtienen la integración de Autocompletar del panel de entrada de forma gratuita. Aunque las API de Autocompletar de Shell se incluyen en Windows 2000 en adelante, la integración de Autocompletar del Panel de entrada solo es compatible con Windows Vista y versiones más recientes. Sin embargo, las aplicaciones compiladas antes del lanzamiento de Windows Vista que usan IAutoComplete obtienen automáticamente la integración de Autocompletar del panel de entrada cuando se ejecutan en Windows Vista.

Para aprovechar el autocompletar de tableta de esta manera, debe usar el objeto autocompletar (CLSID_Autocomplete). Si desea proporcionar funcionalidad de autocompletar para direcciones URL o nombres de archivo, use la función SHAutoComplete para crear el objeto autocompletar.

Además de IAutoComplete, puede implementar IAutoComplete2 o IAutoCompleteDropDowndirectamente y seguir recibiendo automáticamente la integración de Autocompletar del Panel de entrada.

Integración de autocompletar del panel de entrada con aplicaciones de .NET Framework

A partir de .NET Framework 3.0, Windows Forms cuadros de texto incluyen Autocompletar. Windows Forms cuadro de texto Autocompletar se basa en Autocompletar de Shell, lo que significa que la integración de Autocompletar del panel de entrada también está integrada. .NET Framework 3.0 es compatible con el nivel de reducción en las ediciones de Windows publicadas antes de Windows Vista. Sin embargo, dado que la integración de Autocompletar del Panel de entrada solo se admite en Windows Vista o versiones posteriores, la integración de Autocompletar del Panel de entrada solo funciona en una aplicación de .NET Framework 3.0 cuando se instala en Windows Vista o versiones posteriores.

Las aplicaciones que deseen aprovechar la integración de Autocompletar del Panel de entrada en .NET Framework 3.0 deben usar un textBox de Windows Forms con la propiedad AutoCompleteMode habilitada. No es necesario realizar ningún trabajo adicional más allá de obtener Windows Forms Autocompletar para trabajar para aprovechar la integración de Autocompletar del panel de entrada.

Uso de las API de autocompletar del panel de entrada directamente

Los desarrolladores de cuadros de texto autocompletar personalizados deben trabajar con las API de autocompletar del panel de entrada directamente para obtener la experiencia de entrada de texto mejorada que permite la integración de autocompletar del panel de entrada en sus aplicaciones. Las API de Autocompletar del Panel de entrada se incluyen como parte del sistema operativo Windows Vista y como parte de la versión 1.9 o posterior del SDK de Tablet Platform. Las interfaces autocompletar del Panel de entrada son interfaces basadas en COM.

En la siguiente sección se describe el funcionamiento detallado de estas interfaces para una aplicación de C++. Sin embargo, estas interfaces COM se pueden implementar en la mayoría de los lenguajes, incluido C#, mediante el uso de interoperabilidad COM.

Para implementar la integración de Autocompletar del panel de entrada en un cuadro de texto Autocompletar personalizado, las dos interfaces necesarias son la interfaz ITipAutocompleteProvider y la interfaz ITipAutocompleteClient. Las definiciones de estas interfaces se encuentran en TipAutoComplete.h y TipAutoComplete_i.c.

En primer lugar, una aplicación debe definir y crear instancias de una clase de proveedor Autocompletar, que implementa ITipAutocompleteProvider para cada campo de entrada de texto que incluya una lista autocompletar. Esta clase administra el lado de la aplicación de la integración de Autocompletar. Todas las solicitudes de Autocompletar del Panel de entrada se realizan desde el cliente Autocompletar a la aplicación a través del proveedor autocompletar de la aplicación. El proveedor autocompletar de la aplicación debe tener acceso tanto al HWND para la lista autocompletar de la aplicación como al HWIND para el campo de entrada de texto asociado. Además, se deben implementar los métodos siguientes de ITipAutocompleteProvider :

  • ITipAutocompleteProvider::UpdatePendingText (Método): el cliente autocompletar usa este método para notificar a la aplicación el texto que un usuario ha escrito en el Panel de entrada. Al recibir esta notificación, el proveedor es responsable de generar una lista autocompletar como si el texto se hubiera escrito en el campo de entrada de texto de la aplicación. La cadena pasa al proveedor Autocompletar mediante ITipAutocompleteProvider::UpdatePendingText (Método) solo incluye el texto que se encuentra actualmente en el Panel de entrada. Por lo tanto, si hay texto adicional en el campo de entrada de texto, es responsabilidad del proveedor anexarlo correctamente al texto enviado por el cliente. La cadena pasada por ITipAutocompleteProvider::UpdatePendingText (Método) debe tratarse como un reemplazo de la selección actual en el campo. Si no hay ninguna selección actual, se debe colocar en la posición del punto de inserción actual. Una vez generada la lista Autocompletar, el proveedor debe llamar al método ITipAutocompleteProvider::Show pasando TRUE para mostrar la lista Autocompletar. La aplicación no debe almacenar en caché las llamadas a UpdatePendingText , sino tratar cada llamada adicional a UpdatePendingText como cancelación de la llamada anterior para evitar parpadear una interfaz de usuario de lista autocompletar obsoleta. En el código de ejemplo siguiente se muestran estas prácticas.

    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 (Método): este método se llama desde UpdatePendingText, pero también puede llamarlo el cliente autocompletar en cualquier momento. Al recibir esta llamada, el proveedor autocompletar debe ocultar o mostrar el proveedor autocompletar tal como se indica en el parámetro . Antes de mostrar la lista Autocompletar, se espera que el proveedor de Autocompletar consulte al cliente Autocompletar sobre dónde colocar la lista Autocompletar. Más información sobre cómo colocar la lista Autocompletar aparece más adelante en este artículo.

A continuación, la aplicación debe usar la función CoCreateInstance de la biblioteca de plantillas activas (ATL) para generar una instancia de la interfaz ITipAutocompleteClient con el identificador de clase CLSID_TipAutoCompleteClient como servidor en proceso y, a continuación, registrar el proveedor con el cliente. El método ITipAutocompleteClient::AdviseProvider del cliente autocompletar registra el proveedor con el cliente para permitir que el cliente llame al objeto de proveedor Autocompletar de la aplicación. Si tiptsf.dll no está presente en el sistema, se produce un error en la función CoCreateInstance y devuelve REGDB_E_CLASSNOTREG. En este momento, la aplicación puede descartar su objeto ITipAutocompleteProvider y continuar como si el Panel de entrada no existe, porque no está en este tipo de sistema.

La aplicación puede optar por crear una instancia de ITipAutocompleteClient o una instancia por campo de texto. La primera opción requiere que el proveedor se anule el registro y se registre cada vez que se cambie el foco. Más información sobre cómo anular el registro del proveedor de Autocompletar aparece más adelante en este tema.

Hay varios pasos implicados en la colocación de la lista Autocompletar que se debe coordinar entre el proveedor de Autocompletar (aplicación) y el cliente de Autocompletar (Panel de entrada). Antes de que se muestre la lista Autocompletar, ya sea como resultado de una llamada al método Show del proveedor de Autocompletar o debido a que el usuario escribe texto mediante el teclado, el proveedor debe consultar al cliente sobre dónde colocar la lista Autocompletar. El proveedor debe realizar los pasos siguientes:

  • Use el método ITipAutocompleteClient::RequestShowUI del cliente de Autocompletar para determinar si el Panel de entrada está listo para mostrar la lista Autocompletar. RequestShowUI toma el parámetro HWND que es el HWND para la ventana de lista Autocompletar y el método devuelve TRUE o FALSE para indicar si es el estado en el que se puede mostrar la lista Autocompletar. Si el cliente devuelve FALSE, el proveedor no debe intentar mostrar la lista Autocompletar.

  • Llame a RequestShowUI para establecer el identificador de la ventana de lista Autocompletar emergente antes de llamar al método ITipAutocompleteClient::P referredRects. Si no lo hace, se producirá un error de E_INVALIDARG al llamar a PreferredRects.

  • Si RequestShowUI devuelve TRUE, el proveedor debe calcular el rectángulo de coordenadas de pantalla predeterminado de la lista Autocompletar en función de la ubicación del campo de entrada de texto y, a continuación, llamar al ITipAutocompleteClient::P referredRects (Método) del cliente autocompletar. Esto permite al cliente autocompletar ajustar el rectángulo para evitar que la lista autocompletar se superponga con el Panel de entrada. El método PreferredRects toma cuatro parámetros:

    • RECT rcACList: rectángulo de coordenadas de pantalla predeterminado de la lista Autocompletar.
    • RECT rcField: rectángulo de coordenadas de pantalla del campo de entrada de texto correspondiente.
    • RECT *prcModifiedACList: rectángulo de coordenadas de pantalla ajustado para autocompletar
    • BOOL *pfShowAbove: este parámetro indica al proveedor si el rectángulo prcModifiedACList coloca la lista Autocompletar encima o por debajo del Panel de entrada. La aplicación puede usar esta información para dibujar correctamente elementos de la interfaz de usuario, como identificadores de cambio de tamaño y barras de desplazamiento. El proveedor debe pasar inicialmente la dirección en la que la lista Autocompletar se colocaría en relación con el campo de entrada de texto por rcACList. El cliente no cambia pfShowAbove si establece prcModifiedACList igual a rcACList.

    Use los valores devueltos de los argumentos prcModifiedACList y pfShowAbove para colocar y mostrar la ventana de lista Autocompletar. Si el Panel de entrada no está en uso, RequestShowUI siempre devuelve TRUE y prcModifiedACList siempre es el mismo que rcACList. pfShowAbove también no cambia, el resultado es que las llamadas no tienen ningún efecto en el comportamiento de la aplicación. En el código de ejemplo siguiente se muestran estas prácticas.

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;
}

Cuando el usuario selecciona un elemento en la lista Autocompletar, el proveedor debe llamar al método ITipAutocompleteClient::UserSelection del cliente, además de insertar el texto del elemento seleccionado en el campo de entrada de texto. El Panel de entrada usa esta notificación para descartar todo el texto restante que aún no se ha insertado en el Panel de entrada.

Por último, cuando el proveedor ya no es necesario, el proveedor debe desvincularse del cliente autocompletar llamando al método ITipAutocompleteClient::UnadviseProvider del cliente de Autocompletar para anular el registro del proveedor. Es posible que el proveedor deba anular el registro por uno de estos dos motivos: porque el campo de entrada de texto al que está asociado el proveedor se ha destruido o porque la aplicación elige crear solo un cliente autocompletar, en lugar de uno por campo de entrada de texto. En esta instancia, el proveedor debe anular el registro cada vez que el foco se desactive del campo de texto.

Conclusión

La integración de Autocompletar del panel de entrada es una herramienta eficaz para mejorar la experiencia del usuario en las aplicaciones de Windows que incluyen listas de autocompletar en equipos tablet. Sin integración, los usuarios del Panel de entrada deben pasar por un proceso tedioso de insertar texto de un carácter a la vez y cambiar la posición del Panel de entrada con el fin de usar Autocompletar. Con la integración, las listas de autocompletar aparecen en una ubicación cómoda a medida que los usuarios introducen entradas manuscritas en el Panel de entrada, lo que aumenta la velocidad y la facilidad de entrada de texto. En las aplicaciones que incluyen la funcionalidad Autocompletar basada en Autocompletar de Shell o .NET Framework 3.0 Autocompletar, la integración de Autocompletar del Panel de entrada es una característica gratuita y atractiva. Además, se proporciona un conjunto sencillo de interfaces basadas en COM para habilitar la misma experiencia integrada para las aplicaciones que eligen usar controles autocompletar personalizados.

Referencia del panel de entrada de texto