Acerca de los cursores

Windows proporciona un conjunto de cursores estándar que las aplicaciones pueden usar. Los siguientes identificadores de cursor se definen en WinUser.h:

Valor Significado
IDC_ARROW
MAKEINTRESOURCE(32512)
Selección normal
IDC_IBEAM
MAKEINTRESOURCE(32513)
Selección de texto
IDC_WAIT
MAKEINTRESOURCE(32514)
No disponible
IDC_CROSS
MAKEINTRESOURCE(32515)
Selección de precisión
IDC_UPARROW
MAKEINTRESOURCE(32516)
Selección alternativa
IDC_SIZENWSE
MAKEINTRESOURCE(32642)
Redimensionado diagonal 1
IDC_SIZENESW
MAKEINTRESOURCE(32643)
Redimensionado diagonal 2
IDC_SIZEWE
MAKEINTRESOURCE(32644)
Redimensionamiento horizontal
IDC_SIZENS
MAKEINTRESOURCE(32645)
Redimensionamiento vertical
IDC_SIZEALL
MAKEINTRESOURCE(32646)
Mover
IDC_NO
MAKEINTRESOURCE(32648)
No disponible
IDC_HAND
MAKEINTRESOURCE(32649)
Selección de enlace
IDC_APPSTARTING
MAKEINTRESOURCE(32650)
Trabajando en segundo plano
IDC_HELP
MAKEINTRESOURCE(32651)
Selección de ayuda
IDC_PIN
MAKEINTRESOURCE(32671)
Selección de ubicación
IDC_PERSON
MAKEINTRESOURCE(32672)
Selección de persona

También hay disponibles varios cursores adicionales que no tienen identificadores definidos en WinUser.h (o que se consideran obsoletos):

Valor Significado
MAKEINTRESOURCE(32631) Un cursor de lápiz.
MAKEINTRESOURCE(32652) Un cursor de desplazamiento con flechas que apuntan al norte y al sur.
MAKEINTRESOURCE(32653) Un cursor de desplazamiento con flechas que apuntan al oeste y al este.
MAKEINTRESOURCE(32654) Un cursor de desplazamiento con flechas que apuntan al norte, al sur, al este y al oeste.
MAKEINTRESOURCE(32655) Un cursor de desplazamiento con una flecha que apunta al norte.
MAKEINTRESOURCE(32656) Un cursor de desplazamiento con una flecha que apunta al sur.
MAKEINTRESOURCE(32657) Un cursor de desplazamiento con una flecha que apunta al oeste.
MAKEINTRESOURCE(32658) Un cursor de desplazamiento con una flecha que apunta al este.
MAKEINTRESOURCE(32659) Un cursor de desplazamiento con flechas que apuntan al norte y al oeste.
MAKEINTRESOURCE(32660) Un cursor de desplazamiento con flechas que apuntan al norte y al este.
MAKEINTRESOURCE(32661) Un cursor de desplazamiento con flechas que apuntan al sur y al oeste.
MAKEINTRESOURCE(32662) Un cursor de desplazamiento con flechas que apuntan al sur y al este.
MAKEINTRESOURCE(32663) Un cursor de flecha cd.

Consulte Directrices para obtener información sobre el uso de cursores estándar.

Cada cursor estándar tiene asociada una imagen predeterminada correspondiente. El usuario o una aplicación pueden reemplazar la imagen por defecto asociada a cualquier cursor estándar en cualquier momento. Una aplicación reemplaza una imagen por defecto utilizando la función SetSystemCursor.

Una aplicación puede utilizar la función GetIconInfo para recuperar la imagen actual de un cursor y puede dibujar el cursor utilizando la función DrawIconEx.

Los cursores personalizados se diseñan para su uso en una aplicación específica y pueden tener cualquier diseño que defina el desarrollador. La siguiente ilustración muestra varios cursores personalizados.

custom cursors, including hand, banana, drum, wristwatch on hand, metronome

Los cursores pueden ser monocromos o en color, y estar estáticos o animados. El tipo de cursor utilizado en un determinado sistema informático depende de la pantalla del sistema. Las pantallas antiguas, como las VGA, no admiten cursores en color o animados. Las nuevas pantallas, cuyos controladores utilizan el motor de mapa de bits independiente del dispositivo (DIB), sí los soportan.

Los cursores y los iconos son similares y pueden utilizarse indistintamente en muchas situaciones. Los cursores y los iconos son similares y pueden utilizarse indistintamente en muchas situaciones. Por ejemplo, un cursor debe ser monocromo para una pantalla VGA.

Este resumen proporciona información sobre los siguientes temas:

El punto de acceso

En el cursor, un píxel llamado punto de acceso marca el lugar exacto de la pantalla que se ve afectado por un evento del mouse, como pulsar un botón del mouse. Normalmente, el punto de acceso es el punto focal del cursor. El sistema rastrea y reconoce este punto como la posición del cursor. Por ejemplo, los puntos de acceso típicos son el píxel en la punta de un cursor en forma de flecha y el píxel en el centro de un cursor en forma de cruz. Las siguientes imágenes muestran dos cursores de un programa de dibujo, en los que los puntos de acceso están asociados a la punta del pincel y a la cruz del bote de pintura.

hot spots on two cursors

Cuando se produce un evento de entrada del mouse, el controlador del mouse traduce el evento en un mensaje de mouse apropiado que incluye las coordenadas del punto de acceso. El sistema envía el mensaje de mouse a la ventana que contiene el punto de acceso o a la ventana que está capturando la entrada del mouse. Para más información, consulte Entrada del mouse.

El mouse y el cursor

El sistema refleja el movimiento del mouse moviendo el cursor en la pantalla en consecuencia. A medida que el cursor se desplaza por diferentes partes de las ventanas o entra en diferentes ventanas, el sistema (o una aplicación) cambia la apariencia del cursor. Por ejemplo, cuando el cursor pasa por encima de un hiperenlace, el sistema cambia el cursor de una flecha a una mano.

standard cursor changing to a hand when over a hyperlink

Si el sistema no dispone de mouse, el sistema muestra y mueve el cursor solo cuando el usuario elige determinados comandos del sistema, como los utilizados para cambiar el tamaño o mover una ventana. Para proporcionar al usuario un método de mostrar y mover el cursor cuando no se dispone de mouse, una aplicación puede utilizar las funciones del cursor para simular el movimiento del mouse. Dada esta capacidad de simulación, el usuario puede utilizar las teclas de flecha para mover el cursor.

Creación del cursor

Dado que los cursores estándar están predefinidos, no es necesario crearlos. Para utilizar un cursor estándar, una aplicación recupera un identificador de cursor utilizando la función LoadCursor o LoadImage. Un identificador de cursor es un valor único de tipo HCURSOR que identifica un cursor estándar o personalizado.

Para crear un cursor personalizado para una aplicación, normalmente se utiliza una aplicación gráfica y se incluye el cursor como un recurso en el archivo de definición de recursos de la aplicación. En tiempo de ejecución, llame a LoadCursor para recuperar el identificador del cursor. Los recursos del cursor contienen datos para diferentes dispositivos de visualización. La función LoadCursor selecciona automáticamente los datos más apropiados para el dispositivo de visualización actual. Para cargar un cursor directamente desde un fichero .CUR o .ANI, utilice la función LoadCursorFromFile.

También puede crear un cursor personalizado en tiempo de ejecución utilizando la función CreateIconIndirect, que crea un cursor basado en el contenido de una estructura ICONINFO. La función GetIconInfo rellena esta estructura con coordenadas de puntos de acceso e información relativa a la máscara y el color asociados.

Las aplicaciones deberían implementar cursores personalizados como recursos y utilizar LoadCursor, LoadCursorFromFile o LoadImage en lugar de crear el cursor en tiempo de ejecución. El uso de recursos de cursor evita la dependencia del dispositivo, simplifica la localización y permite a las aplicaciones compartir diseños de cursor.

La función CreateIconFromResourceEx permite a una aplicación crear iconos y cursores basados en datos de recursos. CreateIconFromResourceEx crea un cursor basado en datos de recursos binarios de otros archivos ejecutables (.exe) o DLL. Debe ir precedido de llamadas a la función LookupIconIdFromDirectoryEx, así como a varias funciones de recursos. LookupIconIdFromDirectoryEx identifica los datos del cursor más apropiados para el dispositivo de visualización actual. Para más información sobre las funciones de recursos, consulte Recursos.

Ubicación y apariencia del cursor

El sistema muestra automáticamente un cursor para el mouse y actualiza su posición en la pantalla. Puede obtener las coordenadas de pantalla actuales del cursor y mover el cursor a cualquier lugar de la pantalla utilizando las funciones GetCursorPos y SetCursorPos, respectivamente.

También puedes recuperar el identificador del cursor actual utilizando la función GetCursor, y puedes establecer el cursor utilizando la función SetCursor. Después de llamar a SetCursor, la apariencia del cursor no cambia hasta que el mouse se mueve, el cursor se establece explícitamente a un cursor diferente, o se ejecuta un comando del sistema.

Cuando el usuario mueve el mouse, el sistema vuelve a dibujar el cursor en la nueva ubicación. El sistema redibuja automáticamente el diseño del cursor asociado a la ventana a la que apunta el cursor.

Puede ocultar y volver a mostrar el cursor, sin cambiar el diseño del cursor, utilizando la función ShowCursor. Esta función utiliza un contador interno para determinar cuándo ocultar o mostrar el cursor. Un intento de mostrar el cursor incrementa el contador; un intento de ocultar el cursor disminuye el contador. El cursor es visible solo si este contador es mayor o igual a cero.

La función GetCursorInfo obtiene la siguiente información para el cursor global: si el cursor está oculto o mostrado, el identificador del cursor y las coordenadas del cursor.

Confinamiento del cursor

Puede limitar el cursor a un área rectangular de la pantalla utilizando la función ClipCursor. Esto es útil cuando el usuario debe responder a un determinado evento dentro del área confinada del rectángulo. Por ejemplo, puede utilizar ClipCursor para confinar el cursor a un cuadro de diálogo modal, evitando que el usuario interactúe con otras ventanas hasta que el cuadro de diálogo se cierre.

La función GetClipCursor recupera las coordenadas de pantalla del área rectangular a la que se confina temporalmente el cursor. Cuando sea necesario confinar el cursor, también puede utilizar esta función para guardar las coordenadas del área original en la que puede moverse el cursor. De este modo, el cursor podrá volver a la zona original cuando el nuevo confinamiento ya no sea necesario.

Destrucción del cursor

Puede destruir el identificador del cursor y liberar la memoria utilizada por el cursor llamando a la función DestroyCursor. Sin embargo, esta función no tiene efecto sobre un cursor compartido. Un cursor compartido es válido mientras el módulo desde el que se cargó permanezca en memoria. Las siguientes funciones obtienen un cursor compartido:

Cuando ya no necesite un cursor creado mediante la función CreateIconIndirect, deberá destruir el cursor. La función DestroyIcon destruye el identificador del cursor y libera la memoria utilizada por el cursor. Utilice esta función solo en los cursores creados con CreateIconIndirect.

Duplicación de cursor

La función CopyCursor copia un identificador de cursor. Esto permite al código de la aplicación o DLL recuperar el identificador de un cursor perteneciente a otro módulo. Entonces, si el otro módulo se libera, el módulo que copió el cursor puede seguir utilizando el diseño del cursor.

Para obtener información sobre cómo añadir, eliminar o sustituir recursos de cursor en archivos ejecutables, consulte Recursos.

Cursor de clase Window

Cuando se registra una clase de ventana, utilizando la función RegisterClass, se le puede asignar un cursor por defecto, conocido como cursor de clase. Después de que la aplicación registra la clase de ventana, cada ventana de esa clase tiene el cursor de clase especificado.

Para anular el cursor de clase, procese el mensaje WM_SETCURSOR. También puede reemplazar un cursor de clase utilizando la función SetClassLong. Esta función cambia la configuración por defecto de todas las ventanas de una clase especificada. Para más información, consulte Cursor de clase.