Cómo consultar un elemento virtualizado en la vista Elementos

En este tema se describe cómo usar Microsoft Automatización de la interfaz de usuario para recuperar información de la interfaz de usuario sobre los elementos virtualizados en la vista Elementos de Windows 7. En este tema se incluyen las secciones siguientes.

Nota

Este tema solo se aplica a Windows 7. Tenga en cuenta que las características de accesibilidad descritas en este tema pueden cambiar en versiones futuras de Windows.

 

Información general

La vista elementos es un componente de interfaz de usuario que permite a los usuarios ver e interactuar con archivos y otros elementos. En Windows 7, la vista elementos reemplaza el control de vista de lista para presentar elementos en la vista predeterminada del Explorador de Windows. La vista Elementos también se usa en el cuadro de diálogo Elemento común, los resultados de búsqueda del menú Inicio y otros elementos de la interfaz de usuario de Windows 7 que usan el control Explorador del explorador. En comparación con el control de vista de lista, La vista de elementos ofrece las siguientes ventajas para los usuarios:

  • La vista de elementos puede presentar elementos de maneras más útiles, deseables y relevantes, lo que permite a los usuarios encontrar y organizar elementos de forma más sencilla, rápida y agradable.
  • La vista Elementos puede mostrar grandes conjuntos de elementos de orígenes de datos que tienen diferentes características de rendimiento, lo que permite a los usuarios examinar y buscar toda su colección de elementos en varios orígenes.

En la imagen siguiente se muestra la vista elementos en el Explorador de Windows.

captura de pantalla que muestra el explorador de Windows con el componente de vista de elementos

Desde la perspectiva de un desarrollador, la estructura general y la funcionalidad de la vista Elementos es similar a la del control de vista de lista. La principal diferencia es que la vista elementos admite la virtualización, mientras que el control list-view no. Además, la vista Elementos usa dos nuevas interfaces de Automatización de la interfaz de usuario para asegurarse de que se pueda acceder al contenido virtualizado proporcionado por la vista Elementos. Estas interfaces se describen en las secciones siguientes de este tema.

Para obtener información general sobre la virtualización en Automatización de la interfaz de usuario, vea Trabajar con elementos virtualizados.

Estructura del árbol de vistas elementos

En el árbol Automatización de la interfaz de usuario, el elemento de nivel superior Automatización de la interfaz de usuario de la vista Elementos tiene el nombre "ItemsView" y el tipo de control "list". En la imagen anterior, el elemento ItemsView Automatización de la interfaz de usuario se describe en rojo. Existen varios elementos Automatización de la interfaz de usuario por debajo del nivel superior de ItemsView, pero solo se hace referencia a otros dos elementos Automatización de la interfaz de usuario en este documento: elementos de grupo y elementos de lista.

Los elementos de grupo son los elementos Automatización de la interfaz de usuario que contienen todos los elementos de lista de ese grupo: su tipo de control es "Group" y sus nombres varían en función del nombre del grupo. En la imagen anterior, el primer elemento de grupo contiene el encabezado "A-H (1)" y el elemento de lista "Carpeta" y su nombre es "A-H".

Los elementos de lista son los elementos Automatización de la interfaz de usuario que representan los elementos hoja de la vista: su tipo de control es "ListItem" y sus nombres varían en función del nombre del elemento. En la imagen anterior, los elementos de lista son los elementos hoja como "Folder", "Music" y "Picture". Estos tres elementos Automatización de la interfaz de usuario se conocen por los términos elementos ItemsView, Group y ListItem en el resto de este documento.

Virtualización

La vista elementos usa la virtualización, lo que significa que los elementos fuera del área visible de la vista no se capturan del sistema y no se crea la representación de la interfaz de usuario de ellos. Estos elementos se denominan elementos virtualizados. Dado que no se crean, los elementos virtualizados no tienen elementos Automatización de la interfaz de usuario y, por lo tanto, no aparecen en el árbol de Automatización de la interfaz de usuario cuando un cliente de Automatización de la interfaz de usuario enumera el árbol. Además, Automatización de la interfaz de usuario patrones de control solo funcionan en elementos visibles. Por ejemplo, el patrón de control Selection devuelve solo los elementos seleccionados visibles cuando un cliente llama al método IUIAutomationSelectionPattern::GetCurrentSelection .

La vista elementos admite la capacidad de recuperar la siguiente información sobre los elementos virtualizados:

  • Recuento del número total de elementos, incluidos los elementos virtualizados.
  • Automatización de la interfaz de usuario elementos para elementos virtualizados
  • Automatización de la interfaz de usuario elementos para los elementos virtualizados seleccionados

Obtener un recuento de todos los elementos

Un cliente puede usar el elemento ItemsView para obtener un recuento de todos los elementos, así como un recuento de los elementos seleccionados. El elemento ItemsView proporciona dos maneras de obtener estos recuentos. La primera consiste en obtener la propiedad ItemStatus del elemento ItemsView y la segunda es obtener propiedades personalizadas del elemento ItemsView.

La propiedad ItemStatus es una cadena que especifica un recuento del número total de elementos y un recuento de los elementos seleccionados, separados por una coma. Por ejemplo: "3 elementos, 1 elemento seleccionado". Esta cadena se localiza y se puede comunicar directamente al usuario.

Las propiedades personalizadas del elemento ItemsView incluyen una propiedad para el recuento de elementos y otra para el recuento de selección. Incluyen:

  • ItemCount_Property_GUID (ABBF5C45-5CCC-47b7-BB4E-87CB87BBD162): recuento de todos los elementos únicos de la vista. Si se agrupa mediante una propiedad de varios valores (MVP) para que un solo elemento pueda aparecer varias veces, cada elemento se cuenta solo una vez.

    (UIAutomationType: UIAutomationType_Int, Nombre de programación: "ItemCount")

  • SelectedItemCount_Property_GUID (92A053DA-2969-4021-BF27-514CFC2E4A69): recuento de todos los elementos únicos seleccionados en la vista. Si se agrupa mediante una propiedad de varios valores (MVP) para que un solo elemento pueda aparecer varias veces, cada elemento se cuenta solo una vez.

    (UIAutomationType: UIAutomationType_Int, Nombre de programación: "SelectedItemCount")

Estas propiedades personalizadas se definen en Shlguid.h, que se incluye en el Kit de desarrollo de software (SDK) de Windows y estas propiedades se registran a través del método IUIAutomationRegistrar::RegisterProperty . Automatización de la interfaz de usuario clientes usan RegisterProperty para recuperar identificadores de propiedad (PROPERTYID) para las propiedades personalizadas.

Obtener un índice de elemento con respecto a todos los elementos

Un cliente puede obtener el índice de un elemento obteniendo la propiedad ItemStatus de un elemento ListItem o obteniendo una propiedad personalizada de un elemento ListItem.

La propiedad ItemStatus es una cadena que contiene el índice de un elemento con respecto al número total de elementos. Por ejemplo: "elemento 1 de 3". Esta cadena se localiza y se puede comunicar directamente al usuario.

La siguiente propiedad personalizada obtiene el índice de elemento de un elemento ListItem:

  • ItemIndex_Property_GUID (92A053DA-2969-4021-BF27-514CFC2E4A69): índice absoluto basado en 1 de un elemento. Si se agrupa por una propiedad de varios valores (MVP) para que un único elemento pueda aparecer dos veces, cada apariencia del elemento obtiene un índice independiente.

    (UIAutomationType: UIAutomationType_Int, Nombre de programación: "ItemIndex")

Esta propiedad personalizada se define en Shlguid.h, que se incluye en Windows SDK y se registra a través del método IUIAutomationRegistrar::RegisterProperty . Automatización de la interfaz de usuario clientes usan RegisterProperty para recuperar un identificador de propiedad (PROPERTYID) para la propiedad personalizada.

Obtener una referencia a un elemento vitualizado

Un elemento ItemsView implementa el patrón de control ItemContainer (interfaz IItemContainerProvider), que permite a un cliente obtener un elemento Automatización de la interfaz de usuario para un elemento virtualizado (un elemento que está fuera del área visible). ItemsView permite al cliente buscar un elemento ListItem buscando en las propiedades Nombre y Selección; se producirá un error al intentar buscar en cualquier otra propiedad.

Un elemento virtual implementa solo el patrón de control VirtualizedItem (interfaz IVirtualizedItemProvider ). Dado que el elemento representado por un elemento Automatización de la interfaz de usuario virtualizado aún no existe, se producirá un error al intentar obtener cualquier otro patrón de control o propiedad del elemento.

Los elementos ListItem y Group se virtualizan, pero solo se pueden devolver elementos ListItem del patrón de control ItemContainer . Dado que la llamada al método IUIAutomationItemContainerPattern::FindItemByProperty se ejecuta en el subproceso de la interfaz de usuario y está bloqueando, la vista no responderá hasta que se devuelva FindItemByProperty y cualquier otra llamada de método en el proveedor debe esperar hasta que finalice FindItemByProperty . En algunos casos, FindItemByProperty debe procesar todo el conjunto de datos antes de devolverlo, lo que puede consumir muchos recursos. Si se especifica NULL como elemento inicial, FindItemByProperty comienza la búsqueda con el primer elemento de la vista.

ItemsView admite las siguientes propiedades para FindItemByProperty:

  • Nombre (UIA_NamePropertyId): busca el primer elemento cuyo nombre coincide completamente con la cadena especificada. La búsqueda no hace distinción de mayúsculas y minúsculas. No se admiten caracteres comodín o coincidencia parcial. Si se especifica un nombre NULL , se devuelve el siguiente elemento después de que se devuelva el elemento inicial. Especificar nombres NULL permite a un cliente de Automatización de la interfaz de usuario enumerar todos los elementos de la vista; sin embargo, no se recomienda enumerar todos los elementos porque hace que se realicen todos los elementos de la vista.
  • SelectionItem_IsSelected (UIA_SelectionItemIsSelectedPropertyId): busca el primer elemento cuya propiedad SelectionItem_IsSelected coincide con el valor especificado. Especifique TRUE para buscar el primer elemento seleccionado o FALSE para buscar el primer elemento no seleccionado. Tenga cuidado al enumerar todos los elementos seleccionados porque el número de elementos seleccionados puede ser muy grande, especialmente si el usuario ha seleccionado todos los elementos.

Desplazamiento de un elemento virtualizado en pantalla

Después de obtener una referencia a un elemento de Automatización de la interfaz de usuario para un elemento virtualizado (fuera de la pantalla), el cliente puede desplazar el elemento a la vista mediante el método IUIAutomationVirtualizeItemPattern::Realize del patrón de control VirtualizedItem. Una vez realizado el elemento, es visible y todas las propiedades y patrones de control normalmente asociados a un elemento ListItem están disponibles para el cliente.

Solo los elementos ListItem obtenidos por el método IUIAutomationItemContainerPattern::FindItemByProperty exponen el patrón de control VirtualizedItem . Cuando un elemento en pantalla se desplaza fuera de la pantalla, el elemento deja de ser válido y el cliente debe llamar a FindItemByProperty para obtener la referencia fuera de la pantalla.

También es posible mover elementos hacia y fuera de la vista mediante el patrón de control Scroll (o mediante las barras de desplazamiento). Los elementos y grupos se realizan a medida que se desplazan hacia la vista y se virtualizan a medida que se desplazan fuera de la vista.

Trabajar con elementos virtualizados