Cómo implementar información sobre herramientas de In-Place

La información sobre herramientas en contexto se usa para mostrar cadenas de texto para los objetos que se han recortado. Para obtener una ilustración, vea Acerca de los controles de información sobre herramientas.

La diferencia entre la información sobre herramientas normal y local es la posición. De forma predeterminada, cuando el puntero del mouse mantiene el puntero sobre una región que tiene asociada una información sobre herramientas, la información sobre herramientas se muestra junto a la región. Sin embargo, las informaciones sobre herramientas son ventanas y se pueden colocar en cualquier lugar que elija llamando a SetWindowPos. Crear una información sobre herramientas local es cuestión de colocar la ventana de información sobre herramientas para que superponga la cadena de texto.

Lo que necesita saber

Tecnologías

Requisitos previos

  • C/C++
  • Programación de la interfaz de usuario de Windows

Instrucciones

Posicionamiento de una información sobre herramientas de In-Place

Debe realizar un seguimiento de tres rectángulos al colocar una información sobre herramientas en contexto:

  1. Rectángulo que rodea el texto completo de la etiqueta.
  2. Rectángulo que rodea el texto de la información sobre herramientas. El texto de la información sobre herramientas es idéntico al texto de la etiqueta completa y normalmente es el mismo tamaño y fuente. Por lo tanto, los dos rectángulos de texto suelen tener el mismo tamaño.
  3. Rectángulo de la ventana de información sobre herramientas. Este rectángulo es algo mayor que el rectángulo de texto de información sobre herramientas que incluye.

Los tres rectángulos se muestran de forma esquemática en la ilustración siguiente. La parte oculta del texto de la etiqueta se indica mediante un fondo gris.

diagrama que muestra una cadena larga, la mitad de la cual tiene un fondo gris y, a continuación, la misma cadena dentro de un rectángulo de ventana de información sobre herramientas más grande

Para crear una información sobre herramientas en contexto, debe colocar el rectángulo de texto de información sobre herramientas para que superponga el rectángulo de texto de la etiqueta. El procedimiento para alinear los dos rectángulos es relativamente sencillo:

  1. Defina el rectángulo de texto de la etiqueta.
  2. Coloque la ventana de información sobre herramientas para que el rectángulo de texto de información sobre herramientas superponga el rectángulo de texto de la etiqueta.

En la práctica, normalmente es suficiente alinear la esquina superior izquierda de los dos rectángulos de texto. Si se intenta cambiar el tamaño del rectángulo de texto de información sobre herramientas para que coincida exactamente con el rectángulo de texto de la etiqueta, se podrían producir problemas con la presentación de la información sobre herramientas.

El problema con este esquema simple es que no se puede colocar directamente el rectángulo de texto de información sobre herramientas. En su lugar, debe colocar el rectángulo de la ventana de información sobre herramientas lo suficientemente lejos como a la izquierda del rectángulo de texto de la etiqueta para que coincidan las esquinas de los dos rectángulos de texto. Es decir, debe conocer el desplazamiento entre el rectángulo de la ventana de información sobre herramientas y su rectángulo de texto incluido. En general, no hay ninguna manera sencilla de determinar este desplazamiento.

Implementación de información sobre herramientas de In-Place

El siguiente fragmento de código muestra cómo usar un mensaje de TTM_ADJUSTRECT en un controlador de TTN_SHOW para mostrar una información sobre herramientas en contexto. La aplicación indica que el texto de la etiqueta se trunca estableciendo la variable privada fMyStringIsTruncated enTRUE. El controlador llama a una función definida por la aplicación, GetMyItemRect, para recuperar el rectángulo de texto de la etiqueta. Este rectángulo se pasa al control de información sobre herramientas con TTM_ADJUSTRECT, que devuelve el rectángulo de ventana correspondiente. A continuación, se llama a SetWindowPos para colocar la información sobre herramientas sobre la etiqueta.

case TTN_SHOW:
            
    if (fMyStringIsTruncated) 
    {
        RECT rc;
        
        GetMyItemRect(&rc);
        
        SendMessage(hwndToolTip, TTM_ADJUSTRECT, TRUE, (LPARAM)&rc);
        
        SetWindowPos(hwndToolTip, NULL, rc.left, rc.top, 0, 0, 
                     SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
    }

En este ejemplo no se cambia el tamaño de la información sobre herramientas, solo su posición. Los dos rectángulos de texto se alinean en sus esquinas superior izquierda, pero no necesariamente con las mismas dimensiones. En la práctica, la diferencia suele ser pequeña y este enfoque se recomienda para la mayoría de los propósitos. Aunque puede, en principio, usar SetWindowPos para cambiar el tamaño, así como cambiar la posición de la información sobre herramientas, si lo hace, podría tener consecuencias impredecibles.

Observaciones

La versión 5.80 de controles comunes simplifica el uso de información sobre herramientas en contexto mediante la adición de un nuevo mensaje, TTM_ADJUSTRECT. Envíe este mensaje con las coordenadas del rectángulo de texto de etiqueta que desea que la información sobre herramientas superponga y devuelve las coordenadas de un rectángulo de ventana de información sobre herramientas situado correctamente.

Usar controles de información sobre herramientas