Informationen zu Cursorn

Windows bietet eine Reihe von Standardcursorn, die von Anwendungen verwendet werden können. Die folgenden Cursorbezeichner werden in WinUser.h definiert:

Wert Bedeutung
IDC_ARROW
MAKEINTRESOURCE(32512)
Normale Auswahl
IDC_IBEAM
MAKEINTRESOURCE(32513)
Textauswahl
IDC_WAIT
MAKEINTRESOURCE(32514)
Beschäftigt
IDC_CROSS
MAKEINTRESOURCE(32515)
Genauigkeitsauswahl
IDC_UPARROW
MAKEINTRESOURCE(32516)
Alternative Auswahl
IDC_SIZENWSE
MAKEINTRESOURCE(32642)
Diagonale Größenänderung 1
IDC_SIZENESW
MAKEINTRESOURCE(32643)
Diagonale Größenänderung 2
IDC_SIZEWE
MAKEINTRESOURCE(32644)
Horizontale Größenänderung
IDC_SIZENS
MAKEINTRESOURCE(32645)
Vertikale Größenänderung
IDC_SIZEALL
MAKEINTRESOURCE(32646)
Verschieben
IDC_NO
MAKEINTRESOURCE(32648)
Nicht verfügbar
IDC_HAND
MAKEINTRESOURCE(32649)
Linkauswahl
IDC_APPSTARTING
MAKEINTRESOURCE(32650)
Arbeiten im Hintergrund
IDC_HELP
MAKEINTRESOURCE(32651)
Hilfeauswahl
IDC_PIN
MAKEINTRESOURCE(32671)
Positionsauswahl
IDC_PERSON
MAKEINTRESOURCE(32672)
Personenauswahl

Es sind auch einige zusätzliche Cursor verfügbar, die in WinUser.h keine Bezeichner definiert haben (oder als veraltet angesehen werden):

Wert Bedeutung
MAKEINTRESOURCE(32631) Ein Stiftcursor.
MAKEINTRESOURCE(32652) Ein Bildlaufcursor mit Pfeilen, die nach Norden und Süden zeigen.
MAKEINTRESOURCE(32653) Ein Bildlaufcursor mit Pfeilen, die nach Westen und Osten zeigen.
MAKEINTRESOURCE(32654) Ein Bildlaufcursor mit Pfeilen, die nach Norden, Süden, Osten und Westen zeigen.
MAKEINTRESOURCE(32655) Ein Bildlaufcursor mit einem Pfeil, der nach Norden zeigt.
MAKEINTRESOURCE(32656) Ein Bildlaufcursor mit einem Pfeil, der nach Süden zeigt.
MAKEINTRESOURCE(32657) Ein Bildlaufcursor mit einem Pfeil, der nach Westen zeigt.
MAKEINTRESOURCE(32658) Ein Bildlaufcursor mit einem Pfeil, der nach Osten zeigt.
MAKEINTRESOURCE(32659) Ein Bildlaufcursor mit Pfeilen, die nach Norden und Westen zeigen.
MAKEINTRESOURCE(32660) Ein Bildlaufcursor mit Pfeilen, die nach Norden und Osten zeigen.
MAKEINTRESOURCE(32661) Ein Bildlaufcursor mit Pfeilen, die nach Süden und Westen zeigen.
MAKEINTRESOURCE(32662) Ein Bildlaufcursor mit Pfeilen, die nach Süden und Osten zeigen.
MAKEINTRESOURCE(32663) Ein Pfeilcursor mit CD.

Informationen zur Verwendung von Standardcursorn finden Sie in den Richtlinien.

Jedem Standard-Cursor ist ein entsprechendes Standard-Bild zugeordnet. Der Benutzer oder eine Anwendung kann das Standardbild, das einem Standardcursor zugeordnet ist, jederzeit ersetzen. Eine Anwendung ersetzt ein Standardbild mithilfe der SetSystemCursor-Funktion.

Eine Anwendung kann die GetIconInfo-Funktion verwenden, um das aktuelle Bild für einen Cursor abzurufen und den Cursor mithilfe der DrawIconEx-Funktion zu zeichnen.

Benutzerdefinierte Cursor sind für die Verwendung in einer bestimmten Anwendung konzipiert und können jedes vom Entwickler definierte Design haben. Die folgende Abbildung zeigt mehrere benutzerdefinierte Cursor.

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

Cursor können entweder monochrom oder farbig sowie statisch oder animiert sein. Der auf einem bestimmten Computersystem verwendete Cursortyp hängt von der Anzeige des Systems ab. Alte Displays wie VGA unterstützen weder Farbe noch animierte Cursor. Neue Displays, deren Anzeigetreiber das Modul für geräteunabhängige Bitmap (DIB) verwenden, unterstützen sie.

Cursor und Symbole sind ähnlich und können in vielen Situationen austauschbar verwendet werden. Der einzige Unterschied zwischen ihnen besteht darin, dass ein als Cursor angegebenes Bild in dem Format vorliegen muss, das die Anzeige unterstützen kann. Beispielsweise muss ein Cursor für eine VGA-Anzeige monochrom sein.

Diese Übersicht bietet Informationen zu folgenden Themen:

Der Hotspot

Im Cursor markiert ein Pixel, das als Hotspot bezeichnet wird, die genaue Bildschirmposition, die von einem Mausereignis betroffen ist, z. B. das Klicken auf eine Maustaste. In der Regel ist der Hotspot der Fokus des Cursors. Das System verfolgt und erkennt diesen Punkt als Position des Cursors. Typische Hotspots sind beispielsweise das Pixel an der Spitze eines pfeilförmigen Cursors und das Pixel in der Mitte eines fadenkreuzförmigen Cursors. Die folgenden Bilder zeigen zwei Cursor aus einem Zeichenprogramm, bei denen Hotspots mit der Pinselspitze und dem Fadenkreuz der Farbe verknüpft sind.

hot spots on two cursors

Wenn ein Mauseingabeereignis auftritt, übersetzt der Maustreiber das Ereignis in eine entsprechende Mausnachricht, die die Koordinaten des Hotspots enthält. Das System sendet die Mausnachricht an das Fenster, das den Hotspot enthält, oder an das Fenster, das Mauseingaben erfasst. Weitere Informationen finden Sie unter Mauseingabe.

Maus und Cursor

Das System spiegelt die Bewegung der Maus wider, indem der Cursor auf dem Bildschirm entsprechend bewegt wird. Wenn sich der Cursor über verschiedene Teile von Fenstern oder in andere Fenster bewegt, ändert das System (oder eine Anwendung) das Erscheinungsbild des Cursors. Wenn der Cursor beispielsweise über einen Hyperlink fährt, ändert das System den Cursor von einem Pfeil in eine Hand.

standard cursor changing to a hand when over a hyperlink

Wenn das System nicht über eine Maus verfügt, zeigt das System den Cursor nur dann an und bewegt ihn, wenn der Benutzer bestimmte Systembefehle auswählt, beispielsweise solche, die zum Anpassen der Größe oder zum Verschieben eines Fensters verwendet werden. Um dem Benutzer eine Methode zum Anzeigen und Bewegen des Cursors zu bieten, wenn keine Maus verfügbar ist, kann eine Anwendung die Cursorfunktionen verwenden, um Mausbewegungen zu simulieren. Aufgrund dieser Simulationsfunktion kann der Benutzer die Pfeiltasten verwenden, um den Cursor zu verschieben.

Cursorerstellung

Da Standardcursor vordefiniert sind, ist es nicht erforderlich, sie zu erstellen. Um einen Standardcursor zu verwenden, ruft eine Anwendung ein Cursorhandle mithilfe der LoadCursor- oder der LoadImage-Funktion auf. Ein Cursorhandle ist ein eindeutiger Wert des HCURSOR-Typs, der einen Standard- oder benutzerdefinierten Cursor identifiziert.

Zum Erstellen eines benutzerdefinierten Cursors für eine Anwendung verwenden Sie in der Regel eine Grafikanwendung und fügen den Cursor als Ressource in die Ressourcendefinitionsdatei der Anwendung ein. Rufen Sie zur Laufzeit LoadCursor auf, um das Cursorhandle zu erhalten. Cursorressourcen enthalten Daten für mehrere verschiedene Anzeigegeräte. Die LoadCursor-Funktion wählt automatisch die am besten geeigneten Daten für das aktuelle Anzeigegerät aus. Um einen Cursor direkt aus einer .CUR- oder .ANI-Datei zu laden, verwenden Sie die LoadCursorFromFile-Funktion.

Sie können auch zur Laufzeit einen benutzerdefinierten Cursor erstellen, indem Sie die CreateIconIndirect-Funktion verwenden, die einen Cursor basierend auf dem Inhalt einer ICONINFO-Struktur erstellt. Die GetIconInfo-Funktion füllt diese Struktur mit Hotspotkoordinaten und Informationen zur zugeordneten Maske und Farbe aus.

Anwendungen sollten benutzerdefinierte Cursor als Ressourcen implementieren und LoadCursor, LoadCursorFromFile oder LoadImage verwenden, anstatt den Cursor zur Laufzeit zu erstellen. Durch die Verwendung von Cursorressourcen wird eine Geräteabhängigkeit vermieden, die Lokalisierung vereinfacht und Anwendungen können Cursordesigns gemeinsam nutzen.

Die CreateIconFromResourceEx-Funktion ermöglicht einer Anwendung das Erstellen von Symbolen und Cursors basierend auf Ressourcendaten. CreateIconFromResourceEx erstellt einen Cursor basierend auf binären Ressourcendaten aus anderen ausführbaren Dateien (.exe) oder DLLs. Ihm müssen Aufrufe der LookupIconIdFromDirectoryEx-Funktion sowie mehrere Ressourcenfunktionen vorangestellt werden. LookupIconIdFromDirectoryEx identifiziert die am besten geeigneten Cursordaten für das aktuelle Anzeigegerät. Weitere Informationen zu Ressourcenfunktionen finden Sie unter Ressourcen.

Cursorposition und -darstellung

Das System zeigt automatisch einen Cursor für die Maus an und aktualisiert seine Position auf dem Bildschirm. Sie können aktuelle Bildschirmkoordinaten des Cursors abrufen und den Cursor an eine beliebige Position auf dem Bildschirm verschieben, indem Sie die GetCursorPos- und SetCursorPos-Funktionen entsprechend verwenden.

Sie können das Handle für den aktuellen Cursor auch mithilfe der GetCursor-Funktion abrufen, und Sie können den Cursor durch die SetCursor-Funktion festlegen. Nachdem Sie SetCursor aufgerufen haben, ändert sich die Darstellung des Cursors erst, wenn entweder die Maus bewegt wird, der Cursor explizit auf einen anderen Cursor gesetzt wird oder ein Systembefehl ausgeführt wird.

Wenn der Benutzer die Maus bewegt, zeichnet das System den Cursor an der neuen Position neu. Das System zeichnet das Cursordesign des Fensters, auf das der Cursor zeigt, automatisch neu.

Sie können den Cursor ausblenden und erneut anzeigen, ohne den Cursorentwurf zu ändern, indem Sie die ShowCursor-Funktion verwenden. Diese Funktion verwendet einen internen Zähler, um zu bestimmen, wann der Cursor ausgeblendet oder angezeigt werden soll. Ein Versuch, den Cursor anzuzeigen, erhöht den Zähler; ein Versuch, den Cursor auszublenden, verringert den Zähler. Der Cursor ist nur sichtbar, wenn dieser Zähler größer oder gleich Null ist.

Die GetCursorInfo-Funktion ruft die folgenden Informationen für den globalen Cursor ab: ob der Cursor ausgeblendet oder angezeigt ist, das Handle für den Cursor und die Koordinaten des Cursors.

Cursoreinschränkung

Sie können den Cursor auf einen rechteckigen Bereich auf dem Bildschirm beschränken, indem Sie die ClipCursor-Funktion verwenden. Dies ist nützlich, wenn der Benutzer auf ein bestimmtes Ereignis innerhalb des begrenzten Bereichs des Rechtecks reagieren muss. Beispielsweise können Sie ClipCursor verwenden, um den Cursor auf ein modales Dialogfeld zu beschränken und zu verhindern, dass der Benutzer mit anderen Fenstern interagiert, bis das Dialogfeld geschlossen wird.

Die GetClipCursor-Funktion ruft die Bildschirmkoordinaten des rechteckigen Bereichs ab, auf den der Cursor vorübergehend beschränkt ist. Wenn der Cursor beschränkt werden muss, können Sie diese Funktion auch verwenden, um die Koordinaten des ursprünglichen Bereichs zu speichern, in dem der Cursor verschoben werden kann. Anschließend können Sie den Cursor auf den ursprünglichen Bereich zurücksetzen, wenn die neue Begrenzung nicht mehr erforderlich ist.

Cursorlöschung

Sie können das Cursorhandle löschen und den vom Cursor verwendeten Speicher freigeben, indem Sie die DestroyCursor-Funktion aufrufen. Diese Funktion hat jedoch keine Auswirkung auf einen freigegebenen Cursor. Ein freigegebener Cursor ist gültig, solange das Modul, aus dem er geladen wurde, im Speicher verbleibt. Die folgenden Funktionen erhalten einen freigegebenen Cursor:

Wenn Sie einen mit der Funktion CreateIconIndirect erstellten Cursor nicht mehr benötigen, sollten Sie den Cursor löschen. Die DestroyIcon-Funktion löscht das Cursorhandle und gibt den gesamten vom Cursor verwendeten Speicher frei. Verwenden Sie diese Funktion nur für Cursor, die mit CreateIconIndirect erstellt wurden.

Cursorduplizierung

Die CopyCursor-Funktion kopiert ein Cursorhandle. Dadurch kann der Anwendungs- oder DLL-Code das Handle für einen Cursor abrufen, der einem anderen Modul gehört. Wenn das andere Modul freigegeben wird, kann das Modul, das den Cursor kopiert hat, weiterhin das Cursordesign verwenden.

Informationen zum Hinzufügen, Entfernen oder Ersetzen von Cursorressourcen in ausführbaren Dateien finden Sie unter Ressourcen.

Der Fensterklassen-Cursor

Wenn Sie eine Fensterklasse registrieren, können Sie sie mit der RegisterClass-Funktion einem Standardcursor zuweisen, der als Klassencursor bezeichnet wird. Nachdem die Anwendung die Fensterklasse registriert hat, verfügt jedes Fenster dieser Klasse über den angegebenen Klassencursor.

Um den Klassencursor außer Kraft zu setzen, verarbeiten Sie die WM_SETCURSOR-Nachricht. Sie können einen Klassencursor auch mithilfe der SetClassLong-Funktion ersetzen. Diese Funktion ändert die Standardfenstereinstellungen für alle Fenster einer angegebenen Klasse. Weitere Informationen finden Sie unter Klassencursor.