Définition de l’image du curseur

Le curseur est la petite image qui montre l’emplacement de la souris ou d’un autre appareil de pointage. De nombreuses applications modifient l’image du curseur pour envoyer des commentaires à l’utilisateur. Bien qu’il ne soit pas nécessaire, il ajoute un peu de vernis à votre application.

Windows fournit un ensemble d’images de curseur standard, appelées curseurs système. Il s’agit notamment de la flèche, de la main, de la poutre en I, du sablier (qui est maintenant un cercle tournant) et d’autres. Cette section explique comment utiliser les curseurs système. Pour des tâches plus avancées, telles que la création de curseurs personnalisés, consultez Curseurs.

Vous pouvez associer un curseur à une classe de fenêtre en définissant le membre hCursor de la structure WNDCLASS ou WNDCLASSEX . Sinon, le curseur par défaut est la flèche. Lorsque la souris se déplace sur une fenêtre, la fenêtre reçoit un message WM_SETCURSOR (sauf si une autre fenêtre a capturé la souris). À ce stade, l’un des événements suivants se produit :

  • L’application définit le curseur et la procédure de fenêtre retourne TRUE.
  • L’application ne fait rien et transmet WM_SETCURSOR à DefWindowProc.

Pour définir le curseur, un programme effectue les opérations suivantes :

  1. Appelle LoadCursor pour charger le curseur en mémoire. Cette fonction retourne un handle au curseur.
  2. Appelle SetCursor et passe la poignée de curseur.

Sinon, si l’application transmet WM_SETCURSOR à DefWindowProc, la fonction DefWindowProc utilise l’algorithme suivant pour définir l’image de curseur :

  1. Si la fenêtre a un parent, transférez le message WM_SETCURSOR au parent à gérer.
  2. Sinon, si la fenêtre a un curseur de classe, définissez le curseur sur le curseur de classe.
  3. S’il n’y a pas de curseur de classe, définissez le curseur sur le curseur de flèche.

La fonction LoadCursor peut charger un curseur personnalisé à partir d’une ressource ou de l’un des curseurs système. L’exemple suivant montre comment définir le curseur sur le curseur de sélection de lien système prédéfini.

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

Si vous modifiez le curseur, l’image du curseur est réinitialisée lors du déplacement suivant de la souris, sauf si vous interceptez le message WM_SETCURSOR et que vous réinitialisez le curseur. Le code suivant montre comment gérer WM_SETCURSOR.

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

Ce code vérifie d’abord les 16 bits inférieurs de lParam. Si LOWORD(lParam) est égal à HTCLIENT, cela signifie que le curseur se trouve au-dessus de la zone cliente de la fenêtre. Sinon, le curseur se trouve sur la zone non cliente. En règle générale, vous devez uniquement définir le curseur pour la zone cliente et laisser Windows définir le curseur pour la zone non cliente.

Suivant

Entrée utilisateur : exemple étendu