Festlegen des Cursorbilds

Der Cursor ist das kleine Bild, das die Position der Maus oder eines anderen zeigenden Geräts zeigt. Viele Anwendungen ändern das Cursorbild, um dem Benutzer Feedback zu geben. Obwohl dies nicht erforderlich ist, fügt es Ihrer Anwendung ein gutes Stück Feinschliff hinzu.

Windows stellt eine Reihe von Standardcursorbildern bereit, die als Systemcursor bezeichnet werden. Dazu gehören der Pfeil, die Hand, der I-Strahl, die Sanduhr (die jetzt ein sich drehender Kreis ist) und andere. In diesem Abschnitt wird die Verwendung der Systemcursor beschrieben. Komplexere Aufgaben, z. B. das Erstellen von benutzerdefinierten Cursorn, finden Sie unter Cursor.

Sie können einer Fensterklasse einen Cursor zuordnen, indem Sie den hCursor-Member der WNDCLASS- oder WNDCLASSEX-Struktur festlegen. Andernfalls ist der Standardcursor der Pfeil. Wenn die Maus über ein Fenster bewegt wird, erhält das Fenster eine WM_SETCURSOR-Meldung (es sei denn, ein anderes Fenster hat die Maus erfasst). An diesem Punkt tritt eines der folgenden Ereignisse auf:

  • Die Anwendung legt den Cursor fest, und die Fensterprozedur gibt TRUE zurück.
  • Die Anwendung tut nichts und übergibt WM_SETCURSOR an DefWindowProc.

Um den Cursor festzulegen, führt ein Programm Folgendes aus:

  1. Ruft LoadCursor auf, um den Cursor in den Arbeitsspeicher zu laden. Diese Funktion gibt ein Handle an den Cursor zurück.
  2. Ruft SetCursor auf und übergibt das Cursorhandle.

Wenn die Anwendung WM_SETCURSOR an DefWindowProc übergibt, verwendet die DefWindowProc-Funktion den folgenden Algorithmus, um das Cursorbild festzulegen:

  1. Wenn das Fenster über ein übergeordnetes Element verfügt, leiten Sie die WM_SETCURSOR Nachricht an das übergeordnete Element weiter, das behandelt werden soll.
  2. Wenn das Fenster über einen Klassencursor verfügt, legen Sie andernfalls den Cursor auf den Klassencursor fest.
  3. Wenn kein Klassencursor vorhanden ist, legen Sie den Cursor auf den Pfeilcursor fest.

Die LoadCursor-Funktion kann entweder einen benutzerdefinierten Cursor aus einer Ressource oder einen der Systemcursor laden. Das folgende Beispiel zeigt, wie Sie den Cursor auf den vordefinierten Systemlinkauswahlcursor festlegen.

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

Wenn Sie den Cursor ändern, wird das Cursorbild bei der nächsten Mausbewegung zurückgesetzt, es sei denn, Sie fängn die WM_SETCURSOR Meldung ab und legen den Cursor erneut fest. Der folgende Code zeigt, wie WM_SETCURSOR behandelt wird.

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

Dieser Code überprüft zunächst die unteren 16 Bits von lParam. Wenn LOWORD(lParam)gleich HTCLIENT ist, bedeutet dies, dass sich der Cursor über dem Clientbereich des Fensters befindet. Andernfalls befindet sich der Cursor über dem Nichtclientbereich. In der Regel sollten Sie nur den Cursor für den Clientbereich festlegen und Windows den Cursor für den Nichtclientbereich festlegen lassen.

Nächste

Benutzereingabe: Erweitertes Beispiel