Establecimiento de la imagen de cursor

El cursor es la imagen pequeña que muestra la ubicación del mouse u otro dispositivo que apunta. Muchas aplicaciones cambian la imagen del cursor para enviar comentarios al usuario. Aunque no es necesario, agrega un buen poco de pulido a la aplicación.

Windows proporciona un conjunto de imágenes de cursor estándar, denominadas cursores del sistema. Estos incluyen la flecha, la mano, el haz I, el reloj de arena (que ahora es un círculo giratorio) y otros. En esta sección se describe cómo usar los cursores del sistema. Para obtener tareas más avanzadas, como la creación de cursores personalizados, consulte Cursores.

Puede asociar un cursor a una clase de ventana estableciendo el miembro hCursor de la estructura WNDCLASS o WNDCLASSEX . De lo contrario, el cursor predeterminado es la flecha. Cuando el mouse se mueve sobre una ventana, la ventana recibe un mensaje de WM_SETCURSOR (a menos que otra ventana haya capturado el mouse). En este momento, se produce uno de los siguientes eventos:

  • La aplicación establece el cursor y el procedimiento de ventana devuelve TRUE.
  • La aplicación no hace nada y pasa WM_SETCURSOR a DefWindowProc.

Para establecer el cursor, un programa hace lo siguiente:

  1. Llama a LoadCursor para cargar el cursor en la memoria. Esta función devuelve un identificador al cursor.
  2. Llama a SetCursor y pasa el identificador del cursor.

De lo contrario, si la aplicación pasa WM_SETCURSOR a DefWindowProc, la función DefWindowProc usa el siguiente algoritmo para establecer la imagen del cursor:

  1. Si la ventana tiene un elemento primario, reenvíe el mensaje WM_SETCURSOR al elemento primario que se va a controlar.
  2. De lo contrario, si la ventana tiene un cursor de clase, establezca el cursor en el cursor de clase.
  3. Si no hay ningún cursor de clase, establezca el cursor en el cursor de flecha.

La función LoadCursor puede cargar un cursor personalizado desde un recurso o uno de los cursores del sistema. En el ejemplo siguiente se muestra cómo establecer el cursor en el vínculo predefinido del sistema de selección del cursor.

    LPCTSTR cursor = IDC_HAND;
    hCursor = LoadCursor(NULL, cursor);
    SetCursor(hCursor);

Si cambia el cursor, la imagen del cursor se restablece en el siguiente movimiento del mouse, a menos que intercepte el mensaje de WM_SETCURSOR y vuelva a establecer el cursor. En el código siguiente se muestra cómo controlar WM_SETCURSOR.

    case WM_SETCURSOR:
        if (LOWORD(lParam) == HTCLIENT)
        {
            SetCursor(hCursor);
            return TRUE;
        }
        break;

Este código comprueba primero los 16 bits inferiores de lParam. Si LOWORD(lParam) es igual a HTCLIENT, significa que el cursor se encuentra sobre el área cliente de la ventana. De lo contrario, el cursor se encuentra sobre el área que no es cliente. Normalmente, solo debe establecer el cursor para el área cliente y permitir que Windows establezca el cursor para el área que no es cliente.

Siguientes

Entrada del usuario: ejemplo extendido