Übersicht über Mauseingaben
Die Maus ist ein wichtiges, aber optionales, Benutzereingabegerät für Anwendungen. Eine gut geschriebene Anwendung sollte eine Mausschnittstelle enthalten, aber nicht ausschließlich von der Maus abhängig sein, um Benutzereingaben zu erhalten. Die Anwendung sollte auch vollständige Tastaturunterstützung bieten.
Eine Anwendung empfängt Mauseingaben in Form von Nachrichten, die an deren Fenster gesendet oder gepostet werden.
Dieser Abschnitt enthält die folgenden Themen:
- Mauscursor
- Mausaufzeichnung
- Maus-ClickLock
- Mauskonfiguration
- XBUTTONs
- Mausnachrichten
- Maus-Sonar
- Maus verschwindet
- Das Mausrad
- Aktivieren von Fenstern
Mauscursor
Wenn der Benutzer die Maus bewegt, verschiebt das System eine Bitmap auf dem Bildschirm, die als Mauscursor bezeichnet wird. Der Mauscursor enthält einen Punkt aus nur einem Pixel, der als Hotspot bezeichnet wird – einen Punkt, den das System nachverfolgt und als Position des Cursors erkennt. Wenn ein Mausereignis eintritt, empfängt das Fenster, das den Hotspot enthält, normalerweise die sich aus dem Ereignis ergebende Mausnachricht. Das Fenster muss nicht aktiv sein oder den Tastaturfokus haben, um eine Mausnachricht empfangen zu können.
Das System verwaltet eine Variable, die die Mausgeschwindigkeit steuert– d. h. den Abstand, über den der Cursor verschoben wird, wenn der Benutzer die Maus bewegt. Sie können die Funktion SystemParametersInfo mit dem Flag SPI_GETMOUSE oder SPI_SETMOUSE-Flag zum Abrufen oder Festlegen der Mausgeschwindigkeit verwenden. Weitere Informationen zu Mauscursorn finden Sie unter Cursor.
Mausaufzeichnung
Beim Eintreten eines Mausereignisses postet das System normalerweise eine Mausnachricht an das Fenster, das den Cursor-Hotspot enthält. Eine Anwendung kann dieses Verhalten ändern, indem sie mithilfe der Funktion SetCapture Mausnachrichten an ein bestimmtes Fenster weiterleitet. Das Fenster empfängt so lange alle Mausnachrichten, bis die Anwendung die Funktion ReleaseCapture aufruft oder ein anderes Aufzeichnungsfenster angibt oder aber bis der Benutzer auf ein Fenster klickt, das von einem anderen Thread erstellt wurde.
Bei einer Änderung der Mausaufzeichnung sendet das System eine WM_CAPTURECHANGED-Nachricht an das Fenster, in dem die Mausaufzeichnung verloren geht. Der Parameter lParam der Nachricht gibt ein Handle für das Fenster an, das die Mausaufzeichnung erhält.
Die Mauseingabe kann nur im Vordergrundfenster aufgezeichnet werden. Wenn ein Hintergrundfenster die Mauseingabe aufzuzeichnen versucht, empfängt es Nachrichten nur für Mausereignisse, die eintreten, wenn sich der Cursor-Hotspot innerhalb des sichtbaren Teils des Fensters befindet.
Das Aufzeichnen von Mauseingaben ist nützlich, wenn ein Fenster alle Mauseingaben auch dann empfangen muss, wenn sich der Cursor außerhalb des Fensters bewegt. Beispielsweise verfolgt eine Anwendung in der Regel die Cursorposition nach einem Mausereignis „Taste unten“ nach und folgt dem Cursor, bis ein Mausereignis „Taste oben“ eintritt. Wenn eine Anwendung keine Mauseingabe aufgezeichnet hat und der Benutzer die Maustaste außerhalb des Fensters loslässt, empfängt das Fenster die Nachricht „Taste oben“ nicht.
Ein Thread kann mithilfe der Funktion GetCapture ermitteln, ob eines seiner Fenster die Maus aufgezeichnet hat. Wenn eines der Fenster des Threads die Maus aufgezeichnet hat, ruft GetCapture ein Handle in das Fenster ab.
Maus-ClickLock
Die Barrierefreiheitsfunktion „Maus-ClickLock“ ermöglicht es einem Benutzer, die primäre Maustaste nach einem einzigen Klick zu sperren. Für eine Anwendung scheint die Taste weiterhin gedrückt zu sein. Zum Entsperren der Taste kann eine Anwendung eine beliebige Mausnachricht senden, oder der Benutzer kann eine beliebige Maustaste klicken. Mithilfe dieser Funktion können Benutzer komplexe Mauskombinationen einfacher ausführen. Beispielsweise können Personen mit bestimmten physischen Einschränkungen einfacher Text hervorheben, Objekte ziehen oder Menüs öffnen. Weitere Informationen finden Sie unter den folgenden Flags und den Hinweisen in SystemParametersInfo:
- SPI_GETMOUSECLICKLOCK
- SPI_SETMOUSECLICKLOCK
- SPI_GETMOUSECLICKLOCKTIME
- SPI_SETMOUSECLICKLOCKTIME
Mauskonfiguration
Obwohl die Maus ein wichtiges Eingabegerät für Anwendungen ist, hat nicht jeder Benutzer zwangsläufig eine Maus. Eine Anwendung kann ermitteln, ob das System eine Maus enthält, indem sie den Wert SM_MOUSEPRESENT an die Funktion GetSystemMetrics übergibt.
Windows unterstützt eine Maus mit bis zu drei Tasten. Auf einer Maus mit drei Tasten werden die Tasten als die „linke“, „mittlere“ und „rechte“ Taste bezeichnet. Nachrichten und benannte Konstanten im Zusammenhang mit den Maustasten verwenden die Buchstaben „L“, „M“ und „R“ zum Identifizieren der Tasten. Die Taste auf einer Ein-Tasten-Maus gilt als die linke Taste. Obwohl Windows eine Maus mit mehreren Tasten unterstützt, wird bei den meisten Anwendungen hauptsächlich die linke Taste verwendet, und die anderen Tasten werden – wenn überhaupt – nur minimal verwendet.
Anwendungen können auch ein Mausrad unterstützen. Das Mausrad kann gedrückt oder gedreht werden. Wenn das Mausrad gedrückt wird, fungiert es als mittlere (dritte) Schaltfläche und sendet normale Nachrichten der mittleren Taste an Ihre Anwendung. Wenn es gedreht wird, wird eine Radnachricht an Ihre Anwendung gesendet. Weitere Informationen finden Sie im Abschnitt Das Mausrad.
Anwendungen können Anwendungsbefehlsschaltflächen unterstützen. Diese Schaltflächen, die als „X-Schaltflächen“ bezeichnet werden, wurden entwickelt, um einen einfacheren Zugriff auf einen Internetbrowser, E-Mail und Mediendienste zu ermöglichen. Beim Klicken auf eine X-Schaltfläche wird eine WM_APPCOMMAND-Nachricht an Ihre Anwendung gesendet. Weitere Informationen finden Sie in der Beschreibung in der Nachricht WM_APPCOMMAND.
Eine Anwendung kann die Anzahl der Tasten auf der Maus ermitteln, indem sie den Wert SM_CMOUSEBUTTONS an die Funktion GetSystemMetrics übergibt. Zum Konfigurieren der Maus für einen Linkshänder kann die Anwendung die Bedeutung der linken und rechten Maustaste mithilfe der Funktion SwapMouseButton umkehren. Die Übergabe des Werts SPI_SETMOUSEBUTTONSWAP an die Funktion SystemParametersInfo ist eine weitere Möglichkeit zum Umkehren der Tastenbedeutung. Beachten Sie jedoch, dass die Maus eine freigegebene Ressource ist, sodass sich die Umkehr der Tastenbedeutung auf alle Anwendungen auswirkt.
XBUTTONs
Windows unterstützt eine Maus mit fünf Tasten. Zusätzlich zur linken, mittleren und rechten Taste gibt es die Tasten XBUTTON1 und XBUTTON2, die Ihnen bei der Nutzung Ihres Browsers eine Rückwärts- und Vorwärtsnavigation ermöglichen.
Der Fenster-Manager unterstützt XBUTTON1 und XBUTTON2 über die Nachrichten WM_XBUTTON* und WM_NCXBUTTON*. Das HIWORD des WPARAM in diesen Nachrichten enthält ein Flag, das angibt, welche X-Taste gedrückt wurde. Weil diese Mausnachrichten auch zwischen die Konstanten WM_MOUSEFIRST und WM_MOUSELAST passen, kann eine Anwendung alle Mausnachrichten mit GetMessage oder PeekMessage filtern.
Die folgenden Nachrichten unterstützen XBUTTON1 und XBUTTON2:
- WM_APPCOMMAND
- WM_NCXBUTTONDBLCLK
- WM_NCXBUTTONDOWN
- WM_NCXBUTTONUP
- WM_XBUTTONDBLCLK
- WM_XBUTTONDOWN
- WM_XBUTTONUP
- MOUSEHOOKSTRUCTEX
Die folgenden APIs wurden zur Unterstützung dieser Tasten geändert:
Es ist unwahrscheinlich, dass ein untergeordnetes Fenster in einer Komponentenanwendung Befehle für die Tasten XBUTTON1 und XBUTTON2 direkt implementieren kann. Deshalb sendet DefWindowProc sendet eine WM_APPCOMMAND-Nachricht an ein Fenster, wenn eine X-Taste geklickt wird. DefWindowProc sendet die Nachricht WM_APPCOMMAND auch an das übergeordnete Fenster. Dies ist vergleichbar mit der Art und Weise, wie Kontextmenüs mit einem Rechtsklick aufgerufen werden – DefWindowProc sendet eine WM_CONTEXTMENU-Nachricht an das Menü und auch an dessen übergeordnetes Element. Wenn DefWindowProc eine WM_APPCOMMAND-Nachricht für ein Fenster der obersten Ebene empfängt, ruft sie außerdem ein Shell-Hook mit „HSHELL_APPCOMMAND“-Code auf.
Es gibt Unterstützung für Tastaturen mit zusätzlichen Tasten für Browserfunktionen, Medienfunktionen, Anwendungsstart und Energieverwaltung. Weitere Informationen finden Sie unter Tastaturtasten für Browsen und andere Funktionen.
Mausnachrichten
Die Maus generiert ein Eingabeereignis, wenn der Benutzer sie bewegt oder aber eine Maustaste drückt oder loslässt. Das System konvertiert Mauseingabeereignisse in Nachrichten und postet sie an die Nachrichtenwarteschlange des entsprechenden Threads. Wenn Mausnachrichten schneller gepostet werden, als ein Thread sie verarbeiten kann, verwirft das System alle außer der neuesten Mausnachricht.
Ein Fenster empfängt eine Mausnachricht, wenn ein Mausereignis eintritt, während sich der Cursor innerhalb der Fensterrahmen befindet oder wenn das Fenster die Maus aufgezeichnet hat. Mausnachrichten werden in zwei Gruppen unterteilt: Nachrichten im Clientbereich und Nachrichten im Nichtclientbereich. Normalerweise verarbeitet eine Anwendung Nachrichten im Clientbereich und ignoriert Nachrichten im Nichtclientbereich.
Dieser Abschnitt enthält die folgenden Themen:
Mausnachrichten im Clientbereich
Ein Fenster empfängt eine Mausnachricht im Clientbereich, wenn innerhalb dieses Bereichs ein Mausereignis eintritt. Das System postet die Nachricht WM_MOUSEMOVE an das Fenster, wenn der Benutzer den Cursor innerhalb des Clientbereichs verschiebt. Es postet eine der folgenden Meldungen, wenn der Benutzer eine Maustaste drückt oder loslässt, während sich der Cursor innerhalb des Clientbereichs befindet.
Nachricht | Bedeutung |
---|---|
WM_LBUTTONDBLCLK | Die linke Maustaste wurde doppelgeklickt. |
WM_LBUTTONDOWN | Die linke Maustaste wurde gedrückt. |
WM_LBUTTONUP | Die linke Maustaste wurde losgelassen. |
WM_MBUTTONDBLCLK | Die mittlere Maustaste wurde doppelgeklickt. |
WM_MBUTTONDOWN | Die mittlere Maustaste wurde gedrückt. |
WM_MBUTTONUP | Die mittlere Maustaste wurde losgelassen. |
WM_RBUTTONDBLCLK | Die rechte Maustaste wurde doppelgeklickt. |
WM_RBUTTONDOWN | Die rechte Maustaste wurde gedrückt. |
WM_RBUTTONUP | Die rechte Maustaste wurde losgelassen |
WM_XBUTTONDBLCLK | Eine X-Maustaste wurde doppelgeklickt. |
WM_XBUTTONDOWN | Eine X-Maustaste wurde gedrückt. |
WM_XBUTTONUP | Eine X-Maustaste wurde losgelassen. |
Darüber hinaus kann eine Anwendung die Funktion TrackMouseEvent aufrufen, damit das System zwei weitere Nachrichten sendet. Das System postet die Nachricht WM_MOUSEHOVER, wenn der Cursor während eines bestimmten Zeitraums über den Clientbereich bewegt wird. Es postet die Nachricht WM_MOUSELEAVE, wenn der Cursor den Clientbereich verlässt.
Nachrichtenparameter
Der Parameter lParam einer Mausnachricht im Clientbereich gibt die Position des Cursor-Hotspots an. Das niederwertige Wort gibt die x-Koordinate des Hotspots an, und das höherwertige Wort gibt die y-Koordinate an. Die Koordinaten werden in Clientkoordinaten angegeben. Im Clientkoordinatensystem werden alle Punkte auf dem Bildschirm relativ zu den Koordinaten (0,0) der oberen linken Ecke des Clientbereichs angegeben.
Der ParameterwParam enthält Flags, die den Status der anderen Maustasten sowie der STRG- und UMSCHALTTASTE zum Zeitpunkt des Mausereignisses anzeigen. Sie können diese Flags überprüfen, wenn die Verarbeitung von Mausnachrichten vom Status einer anderen Maustaste oder aber der STRG- oder UMSCHALTTASTE abhängig ist. Der Parameter wParam kann eine Kombination der folgenden Werte sein.
Wert | BESCHREIBUNG |
---|---|
MK_CONTROL | Die STRG-TASTE ist gedrückt. |
MK_LBUTTON | Die linke Maustaste ist gedrückt. |
MK_MBUTTON | Die mittlere Maustaste ist gedrückt. |
MK_RBUTTON | Die rechte Maustaste ist gedrückt. |
MK_SHIFT | Die UMSCHALTTASTE ist gedrückt. |
MK_XBUTTON1 | Die erste X-Taste ist ausgefallen. |
MK_XBUTTON2 | Die zweite X-Taste ist ausgefallen. |
Doppelklicknachrichten
Das System generiert eine Doppelklicknachricht, wenn der Benutzer zweimal in schneller Folge eine Maustaste klickt. Wenn der Benutzer eine Taste klickt, richtet das System ein Rechteck ein, das um den Cursor-Hotspot zentriert ist. Außerdem markiert es den Zeitpunkt, zu dem der Klick erfolgt ist. Wenn der Benutzer dieselbe Taste ein zweites Mal klickt, ermittelt das System, ob sich der Hotspot noch innerhalb des Rechtecks befindet, und berechnet die seit dem ersten Klick verstrichene Zeit. Wenn sich der Hotspot noch innerhalb des Rechtecks befindet und die verstrichene Zeit den Timeoutwert für Doppelklicks nicht überschreitet, generiert das System eine Doppelklicknachricht.
Eine Anwendung kann Timeoutwerte für Doppelklicks mithilfe der Funktionen GetDoubleClickTime und . SetDoubleClickTime abrufen bzw. festlegen. Alternativ kann die Anwendung den Timeoutwert für Doppelklicks mithilfe des Flags SPI_SETDOUBLECLICKTIME bei der Funktion SystemParametersInfo festlegen. Sie kann auch die Größe des Rechtecks festlegen, das das System zum Erkennen von Doppelklicks verwendet, indem die Flags SPI_SETDOUBLECLKWIDTH und SPI_SETDOUBLECLKHEIGHT an SystemParametersInfo übergeben werden. Beachten Sie jedoch, dass sich das Festlegen des Timeoutwerts für Doppelklicks und des Rechtecks auf alle Anwendungen auswirkt.
Ein anwendungsdefiniertes Fenster empfängt standardmäßig keine Doppelklicknachrichten. Aufgrund des Systemaufwands, der mit dem Generieren von Doppelklicknachrichten verbunden ist, werden diese Nachrichten nur für Fenster generiert, die zu Klassen mit dem Klassenstil CS_DBLCLKS gehören. Ihre Anwendung muss diesen Stil beim Registrieren der Fensterklasse festlegen. Weitere Informationen finden Sie unter Fensterklassen.
Eine Doppelklicknachricht ist immer die dritte Nachricht in einer Reihe von vier Nachrichten. Die ersten beiden Nachrichten sind die Nachrichten „Taste unten“ und „Taste oben“, die durch den ersten Klick generiert wurden. Der zweite Klick generiert die Doppelklicknachricht, gefolgt von einer weiteren Nachricht „Taste oben“. Wenn Sie beispielsweise die linke Maustaste doppelklicken, wird die folgende Nachrichtensequenz generiert:
Weil ein Fenster immer eine Nachricht „Taste unten“ empfängt, bevor es eine Doppelklicknachricht empfängt, verwendet eine Anwendung normalerweise eine Doppelklicknachricht zum Erweitern einer Aufgabe, die während einer Nachricht „Taste unten“ begonnen wurde. Wenn ein Benutzer beispielsweise auf eine Farbe in der Farbpalette von Microsoft Paint klickt, zeigt Paint die ausgewählte Farbe neben der Palette an. Wenn er auf eine Farbe doppelklickt, zeigt Paint die Farbe an und öffnet das Dialogfeld Farben bearbeiten.
Mausnachrichten im Nichtclientbereich
Ein Fenster empfängt eine Mausnachricht im Nichtclientbereich, wenn ein Mausereignis in einem beliebigen Teil eines Fensters – mit Ausnahme des Clientbereichs – eintritt. Der Nichtclientbereich eines Fensters besteht aus Rahmen, Menüleiste, Titelleiste, Bildlaufleiste, Fenstermenü, Schaltfläche „Minimieren“ und Schaltfläche „Maximieren“.
Das System generiert Nachrichten im Nichtclientbereich hauptsächlich zur eigenen Verwendung. Beispielsweise verwendet das System Nachrichten im Nichtclientbereich, um den Cursor in einen Pfeil mit zwei Spitzen zu ändern, wenn der Cursor-Hotspot in den Rahmen eines Fensters wechselt. Ein Fenster muss Mausnachrichten für den Nichtclientbereich an die Funktion DefWindowProc übergeben, um die integrierte Mausschnittstelle nutzen zu können.
Es gibt eine entsprechende Mausnachricht im Nichtclientbereich für jede Mausnachricht im Clientbereich. Die Namen dieser Nachrichten sind ähnlich – mit der Ausnahme, dass die benannten Konstanten für die Nachrichten im Nichtclientbereich die Buchstaben „NC“ enthalten. Wenn Sie beispielsweise den Cursor im Nichtclientbereich verschieben, wird eine WM_NCMOUSEMOVE-Nachricht generiert, und wenn Sie die linke Maustaste drücken, während sich der Cursor im Nichtclientbereich befindet, wird eine WM_NCLBUTTONDOWN-Nachricht generiert.
Der Parameter lParam einer Mausnachricht im Nichtclientbereich ist eine Struktur mit den x- und y-Koordinaten des Cursor-Hotspots. Im Gegensatz zu Koordinaten von Mausnachrichten im Clientbereich werden die Koordinaten in Bildschirmkoordinaten statt in Clientkoordinaten angegeben. Im Bildschirmkoordinatensystem sind alle Punkte auf dem Bildschirm relativ zu den Koordinaten (0,0) der oberen linken Ecke.
Der Parameter wParam enthält einen Treffertestwert – einen Wert, der angibt, wo im Nichtclientbereich das Mausereignis eingetreten ist. Im folgenden Abschnitt wird der Zweck von Treffertestwerten erläutert.
Die Nachricht „WM_NCHITTEST“
Immer wenn ein Mausereignis eintritt, sendet das System eine WM_NCHITTEST-Nachricht entweder an das Fenster, das den Cursor-Hotspot enthält, oder an das Fenster, das die Maus aufgezeichnet hat. Das System ermittelt anhand dieser Nachricht, ob eine Mausnachricht im Clientbereich oder im Nichtclientbereich gesendet werden soll. Eine Anwendung, die Nachrichten zu Mausbewegung und Maustasten empfangen muss, muss die Nachricht WM_NCHITTEST an die Funktion DefWindowProc übergeben.
Der Parameter lParam der Nachricht WM_NCHITTEST enthält die Bildschirmkoordinaten des Cursor-Hotspots. Die Funktion DefWindowProc untersucht die Koordinaten und gibt einen Treffertestwert zurück, der die Position des Hotspots angibt. Der Treffertestwert kann einer der folgenden Werte sein.
Wert | Position des Hotspots |
---|---|
HTBORDER | Im Rahmen eines Fensters, das keinen Rahmen für die Größenanpassung hat. |
HTBOTTOM | Im unteren horizontalen Rahmen eines Fensters. |
HTBOTTOMLEFT | In der unteren linken Ecke eines Fensterrahmens. |
HTBOTTOMRIGHT | In der unteren rechten Ecke eines Fensterrahmens. |
HTCAPTION | In einer Titelleiste. |
HTCLIENT | In einem Clientbereich. |
HTCLOSE | In einer Schaltfläche Schließen. |
HTERROR | Auf dem Bildschirmhintergrund oder einer Trennlinie zwischen Fenstern (identisch mit „HTNOWHERE“ – mit der Ausnahme, dass die Funktion DefWindowProc einen Systemsignalton erzeugt, um einen Fehler anzuzeigen). |
HTGROWBOX | In einem Größenfeld (identisch mit HTSIZE). |
HTHELP | In einer Schaltfläche Hilfe. |
HTHSCROLL | In einer horizontalen Bildlaufleiste. |
HTLEFT | Im linken Rahmen eines Fensters. |
HTMENU | In einem Menü. |
HTMAXBUTTON | In einer Schaltfläche Maximieren. |
HTMINBUTTON | In einer Schaltfläche Minimieren. |
HTNOWHERE | Auf dem Bildschirmhintergrund oder einer Trennlinie zwischen Fenstern. |
HTREDUCE | In einer Schaltfläche Minimieren. |
HTRIGHT | Im rechten Rahmen eines Fensters. |
HTSIZE | In einem Größenfeld (identisch mit HTGROWBOX). |
HTSYSMENU | In einem System-Menü oder in einer Schaltfläche Schließen in einem untergeordneten Fenster. |
HTTOP | Im oberen horizontalen Rahmen eines Fensters. |
HTTOPLEFT | In der oberen linken Ecke eines Fensterrahmens. |
HTTOPRIGHT | In der oberen rechten Ecke eines Fensterrahmens. |
HTTRANSPARENT | In einem Fenster, das zurzeit von einem anderen Fenster in demselben Thread verdeckt wird. |
HTVSCROLL | In der vertikalen Bildlaufleiste. |
HTZOOM | In einer Schaltfläche Maximieren. |
Wenn sich der Cursor im Clientbereich eines Fensters befindet, gibt DefWindowProc den Treffertestwert HTCLIENT an die Fensterprozedur zurück. Wenn die Fensterprozedur diesen Code an das System zurückgibt, konvertiert es die Bildschirmkoordinaten des Cursor-Hotspots in Clientkoordinaten und postet dann die entsprechende Mausnachricht im Clientbereich.
Die Funktion DefWindowProc gibt einen der anderen Treffertestwerte zurück, wenn sich der Cursor-Hotspot im Nichtclientbereich eines Fensters befindet. Wenn die Fensterprozedur einen dieser Treffertestwerte zurückgibt, postet das System eine Mausnachricht im Nichtclientbereich, wobei es den Treffertestwert im Parameter wParam der Nachricht und die Cursorkoordinaten im Parameter lParam platziert.
Maus-Sonar
Die Barrierefreiheitsfunktion „Maus-Sonar“ zeigt kurz mehrere konzentrische Kreise um den Zeiger herum an, wenn der Benutzer die STRG-TASTE drückt und loslässt. Diese Funktion hilft einem Benutzer, den Mauszeiger auf einem Bildschirm zu finden, der überladen ist oder bei dem die Auflösung auf „hoch“ festgelegt wurde, auf einem Monitor mit schlechter Qualität oder für Benutzer mit Sehschwäche. Weitere Informationen finden Sie in SystemParametersInfo unter den folgenden Flags:
SPI_GETMOUSESONAR
SPI_SETMOUSESONAR
Maus verschwindet
Die Barrierefreiheitsfunktion „Maus verschwindet“ blendet den Zeiger bei der Benutzereingabe aus. Der Mauszeiger wird erneut angezeigt, wenn der Benutzer die Maus bewegt. Mit dieser Funktion wird verhindert, dass der Zeiger den gerade eingegebenen Text verdeckt, z. B. in einer E-Mail oder einem anderen Dokument. Weitere Informationen finden Sie in SystemParametersInfo unter den folgenden Flags:
SPI_GETMOUSEVANISH
SPI_SETMOUSEVANISH
Das Mausrad
Das Mausrad kombiniert die Features eines Rads und einer Maustaste. Das Rad hat getrennte Kerben mit gleichem Abstand. Wenn Sie es drehen, wird eine Radnachricht an Ihre Anwendung gesendet, während jede Kerbe gefunden wird. Die Radtaste kann auch als normale mittlere (dritte) Windows-Taste fungieren. Durch Drücken und Loslassen des Mausrads werden die Standardnachrichten WM_MBUTTONUP und WM_MBUTTONDOWN gesendet. Durch Doppelklicken auf die dritte Taste wird die Standardnachricht WM_MBUTTONDBLCLK gesendet.
Das Mausrad wird durch die Nachricht WM_MOUSEWHEEL unterstützt.
Wenn Sie die Maus drehen, wird die Nachricht WM_MOUSEWHEEL an das Fokusfenster gesendet. Die Funktion DefWindowProc gibt die Nachricht an das übergeordnete Fenster weiter. Es sollte keine interne Weiterleitung der Nachricht erfolgen, da DefWindowProc sie in der übergeordneten Kette so lange weitergibt, bis ein Fenster gefunden wird, in dem sie verarbeitet wird.
Ermitteln der Anzahl von Bildlaufzeilen
Anwendungen sollten mithilfe der Funktion SystemParametersInfo die Anzahl der Zeilen abrufen, die ein Dokument für jeden Bildlaufvorgang gescrollt wird (Radkerbe). Zum Abrufen der Anzahl von Zeilen führt eine Anwendung den folgenden Aufruf aus:
SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, pulScrollLines, 0)
Die Variable „pulScrollLines“ zeigt auf einen ganzzahligen Wert ohne Vorzeichen, der die vorgeschlagene Anzahl von Zeilen zum Scrollen empfängt, wenn das Mausrad ohne Zusatztasten gedreht wird:
- Wenn diese Zahl „0“ ist, sollte kein Scrollen erfolgen.
- Wenn diese Zahl WHEEL_PAGESCROLL ist, sollte ein Drehen des Mausrads als einmaliges Klicken in den Bereich „Seite nach unten“ oder „Seite nach oben“ der Bildlaufleiste interpretiert werden.
- Wenn die Anzahl der zu scrollenden Zeilen größer als die Anzahl der anzuzeigenden Zeilen ist, sollte der Scrollvorgang auch als Vorgang „Seite nach unten“ oder „Seite nach oben“ interpretiert werden.
Der Standardwert für die Anzahl der Bildlaufzeilen ist „3“. Wenn ein Benutzer die Anzahl der Bildlaufzeilen ändert, sendet das Betriebssystem mithilfe des Blatts „Mauseigenschaften“ in der Systemsteuerung eine WM_SETTINGCHANGE-Nachricht an alle Fenster der obersten Ebene mit der Angabe SPI_SETWHEELSCROLLLINES. Wenn eine Anwendung die Nachricht WM_SETTINGCHANGE empfängt, kann sie die neue Anzahl von Bildlaufzeilen abrufen, indem sie Folgendes aufruft:
SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, pulScrollLines, 0)
Steuerelemente zum Scrollen
In der folgenden Tabelle sind die Steuerelemente mit Scrollfunktionen aufgeführt (einschließlich der vom Benutzer festgelegten Bildlaufzeilen).
Control | Scrollen |
---|---|
Bearbeitungssteuerelement | Vertikal und horizontal. |
Listenfeldsteuerelement | Vertikal und horizontal. |
Kombinationsfeld | Wenn es nicht erweitert wurde, ruft jedes Scrollen das nächste oder vorherige Element ab. Wenn es erweitert wurde, leitet jedes Scrollen die Nachricht an das Listenfeld weiter, das entsprechend gescrollt wird. |
CMD (Befehlszeile) | Vertikal. |
Strukturansicht | Vertikal und horizontal. |
Listenansicht | Vertikal und horizontal. |
Scrollvorgänge nach oben/unten | Jeweils ein Element. |
Scrolls auf der TrackBar | Jeweils ein Element. |
Microsoft Rich Edit 1.0 | Vertikal. Beachten Sie, dass der Exchange-Client eigene Versionen der Listenansicht- und Strukturansicht-Steuerelemente hat, die keine Radunterstützung bieten. |
Microsoft Rich Edit 2.0 | Vertikal. |
Erkennen einer Maus mit einem Rad
Wenn Sie ermitteln möchten, ob eine Maus mit einem Rad verbunden ist, rufen Sie GetSystemMetrics mit SM_MOUSEWHEELPRESENT auf. Der Rückgabewert TRUE gibt an, dass die Maus verbunden ist.
Das folgende Beispiel stammt aus der Fensterprozedur für ein mehrzeiliges Bearbeitungssteuerelement:
BOOL ScrollLines(
PWNDDATA pwndData, //scrolls the window indicated
int cLinesToScroll); //number of times
short gcWheelDelta; //wheel delta from roll
PWNDDATA pWndData; //pointer to structure containing info about the window
UINT gucWheelScrollLines=0;//number of lines to scroll on a wheel rotation
gucWheelScrollLines = SystemParametersInfo(SPI_GETWHEELSCROLLLINES,
0,
pulScrollLines,
0);
case WM_MOUSEWHEEL:
/*
* Do not handle zoom and datazoom.
*/
if (wParam & (MK_SHIFT | MK_CONTROL)) {
goto PassToDefaultWindowProc;
}
gcWheelDelta -= (short) HIWORD(wParam);
if (abs(gcWheelDelta) >= WHEEL_DELTA && gucWheelScrollLines > 0)
{
int cLineScroll;
/*
* Limit a roll of one (1) WHEEL_DELTA to
* scroll one (1) page.
*/
cLineScroll = (int) min(
(UINT) pWndData->ichLinesOnScreen - 1,
gucWheelScrollLines);
if (cLineScroll == 0) {
cLineScroll++;
}
cLineScroll *= (gcWheelDelta / WHEEL_DELTA);
assert(cLineScroll != 0);
gcWheelDelta = gcWheelDelta % WHEEL_DELTA;
return ScrollLines(pWndData, cLineScroll);
}
break;
Aktivieren von Fenstern
Wenn der Benutzer auf ein inaktives Fenster der obersten Ebene oder auf das untergeordnete Fenster eines inaktiven Fensters der obersten Ebene klickt, sendet das System die Nachricht WM_MOUSEACTIVATE (unter anderem) an das Fenster der obersten Ebene oder das untergeordnete Fenster. Das System sendet diese Nachricht nach dem Posten der Nachricht WM_NCHITTEST an das Fenster, aber noch vor dem Posten der Nachricht „Taste unten“. Wenn WM_MOUSEACTIVATE an die Funktion DefWindowProc übergeben wird, aktiviert das System das Fenster der obersten Ebene und postet dann die Nachricht „Taste unten“ an das Fenster der obersten Ebene oder das untergeordnete Fenster.
Durch die Verarbeitung von WM_MOUSEACTIVATE kann ein Fenster steuern, ob das Fenster der obersten Ebene als Ergebnis eines Mausklicks zum aktiven Fenster wird und ob das geklickte Fenster die nachfolgende Nachricht „Taste unten“ empfängt. Hierzu gibt es nach der Verarbeitung von WM_MOUSEACTIVATE einen der folgenden Werte zurück.
Wert | Bedeutung |
---|---|
MA_ACTIVATE | Aktiviert das Fenster und verwirft die Mausnachricht nicht. |
MA_NOACTIVATE | Aktiviert nicht das Fenster und verwirft nicht die Mausnachricht. |
MA_ACTIVATEANDEAT | Aktiviert das Fenster und verwirft die Mausnachricht. |
MA_NOACTIVATEANDEAT | Aktiviert nicht das Fenster, verwirft aber die Mausnachricht. |
Siehe auch
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für