Übersicht Mauseingaben
Die Maus ist ein wichtiges, aber optionales Benutzereingabegerät für Anwendungen. Eine gut geschriebene Anwendung sollte eine Mausschnittstelle enthalten, aber sie sollte nicht ausschließlich von der Maus zum Abrufen von Benutzereingaben abhängen. Die Anwendung sollte auch vollständige Tastaturunterstützung bieten.
Eine Anwendung empfängt Mauseingaben in Form von Nachrichten, die an ihre Fenster gesendet werden.
Dieser Abschnitt enthält die folgenden Themen:
- Mauscursor
- Mausaufzeichnung
- Maus ClickLock
- Mauskonfiguration
- XBUTTONs
- Mausnachrichten
- Maus-Sonar
- Maus vanish
- 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 Mauszeiger enthält einen einpixeligen Punkt, den sogenannten Hotspot, einen Punkt, den das System verfolgt und als die Position des Cursors erkennt. Wenn ein Mausereignis auftritt, empfängt das Fenster, das den Hotspot enthält, normalerweise die Mausnachricht, die sich aus dem Ereignis ergibt. Das Fenster muss nicht aktiv sein oder den Tastaturfokus haben, um eine Mausnachricht zu erhalten.
Das System verwaltet eine Variable, die die Mausgeschwindigkeit steuert, d. h. der Abstand, den der Cursor bewegt, wenn der Benutzer die Maus bewegt. Sie können dieSystemParametersInfo-Funktion mit dem SPI_GETMOUSE oder SPI_SETMOUSE Flag verwenden, um die Mausgeschwindigkeit abzurufen oder festzulegen. Weitere Informationen zu Mauszeigern finden Sie unter "Cursor".
Mausaufzeichnung
Das System sendet in der Regel eine Mausnachricht an das Fenster, das den Cursor-Hotspot enthält, wenn ein Mausereignis auftritt. Eine Anwendung kann dieses Verhalten mithilfe der SetCapture-Funktion ändern, um Mausnachrichten an ein bestimmtes Fenster weiterzuleiten. Das Fenster empfängt alle Mausmeldungen, bis die Anwendung die ReleaseCapture-Funktion aufruft oder ein anderes Aufnahmefenster angibt, oder bis der Benutzer auf ein Fenster klickt, das von einem anderen Thread erstellt wurde.
Wenn sich die Mausaufnahme ändert, sendet das System eine WM_CAPTURECHANGED Nachricht an das Fenster, das die Mausaufnahme verliert. Der lParam-Parameter der Nachricht gibt ein Handle für das Fenster an, das die Mausaufnahme erhält.
Nur das Vordergrundfenster kann Mauseingaben erfassen. Wenn ein Hintergrundfenster versucht, Mauseingaben zu erfassen, empfängt es nur Nachrichten für Mausereignisse, die auftreten, wenn sich der Cursor-Hotspot im sichtbaren Teil des Fensters befindet.
Das Erfassen von Mauseingaben ist nützlich, wenn ein Fenster alle Mauseingaben empfangen muss, auch wenn der Cursor außerhalb des Fensters bewegt wird. Beispielsweise verfolgt eine Anwendung die Cursorposition nach einem Abwärtsereignis der Maustaste nach, und folgt dem Cursor, bis ein Ereignis mit der Maustaste nach oben eintritt. Wenn eine Anwendung keine Mauseingabe erfasst hat und der Benutzer die Maustaste außerhalb des Fensters loslässt, empfängt das Fenster die Schaltflächen-up-Nachricht nicht.
Ein Thread kann die GetCapture-Funktion verwenden, um zu bestimmen, ob eines seiner Fenster die Maus erfasst hat. Wenn eines der Threadfenster die Maus erfasst hat, ruft GetCapture ein Handle für das Fenster ab.
Maus ClickLock
Mit dem Barrierefreiheitsfeature "Mouse ClickLock" kann ein Benutzer die primäre Maustaste nach einem einzelnen Klick sperren. Für eine Anwendung wird die Schaltfläche weiterhin gedrückt. Um die Schaltfläche zu entsperren, kann eine Anwendung eine beliebige Mausnachricht senden, oder der Benutzer kann auf eine beliebige Maustaste klicken. Mit diesem Feature können Benutzer komplexe Mauskombinationen einfacher ausführen. Beispielsweise können Personen mit bestimmten physischen Einschränkungen Text hervorheben, Objekte ziehen oder Menüs einfacher öffnen. Weitere Informationen finden Sie in 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, verfügt nicht jeder Benutzer unbedingt über eine Maus. Eine Anwendung kann bestimmen, ob das System eine Maus enthält, indem der SM_MOUSEPRESENT-Wert an die GetSystemMetrics-Funktion übergeben wird.
Windows unterstützt eine Maus mit bis zu drei Tasten. Bei einer Drei-Tasten-Maustaste werden die Schaltflächen als linke, mittlere und rechte Taste festgelegt. Nachrichten und benannte Konstanten im Zusammenhang mit den Maustasten verwenden die Buchstaben L, M und R, um die Schaltflächen zu identifizieren. Die Schaltfläche auf einer Ein-Tasten-Maus wird als linke Taste betrachtet. Obwohl Windows eine Maus mit mehreren Schaltflächen unterstützt, verwenden die meisten Anwendungen die linke Taste in erster Linie und die anderen minimal, wenn überhaupt.
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) Taste und sendet normale Nachrichten der mittleren Taste an Ihre Anwendung. Wenn sie 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, sind so konzipiert, dass der Zugriff auf einen Internetbrowser, elektronische E-Mail- und Mediendienste erleichtert wird. Wenn eine X-Taste gedrückt wird, wird eine WM_APPCOMMAND Nachricht an Ihre Anwendung gesendet. Weitere Informationen finden Sie in der Beschreibung in der WM_APPCOMMAND Nachricht.
Eine Anwendung kann die Anzahl der Schaltflächen auf der Maus bestimmen, indem sie den SM_CMOUSEBUTTONS-Wert an die GetSystemMetrics-Funktion übergeben. Um die Maus für einen linkshändigen Benutzer zu konfigurieren, kann die Anwendung die SwapMouseButton-Funktion verwenden, um die Bedeutung der linken und rechten Maustasten umzukehren. Das Übergeben des SPI_SETMOUSEBUTTONSWAP-Werts an die SystemParametersInfo-Funktion ist eine weitere Möglichkeit, die Bedeutung der Schaltflächen umzukehren. Beachten Sie jedoch, dass die Maus eine freigegebene Ressource ist, sodass sich das Umkehren der Bedeutung der Schaltflächen auf alle Anwendungen auswirkt.
XBUTTONs
Windows unterstützt eine Maus mit fünf Schaltflächen. Neben den linken, mittleren und rechten Schaltflächen gibt es XBUTTON1 und XBUTTON2, die bei Verwendung Ihres Browsers rückwärts und vorwärts navigieren.
Der Fenster-Manager unterstützt XBUTTON1 und XBUTTON2 über die WM_XBUTTON* - und WM_NCXBUTTON* -Nachrichten. Das HIWORD des WPARAM in diesen Nachrichten enthält ein Kennzeichen, das angibt, welche X-Taste gedrückt wurde. Da diese Mausnachrichten auch zwischen den Konstanten WM_MOUSEFIRST und WM_MOUSELAST passen, kann eine Anwendung alle Mausnachrichten mit GetMessage oder PeekMessage filtern.
Folgende Unterstützung XBUTTON1 und XBUTTON2:
- WM_APPCOMMAND
- WM_NCXBUTTONDBLCLK
- WM_NCXBUTTONDOWN
- WM_NCXBUTTONUP
- WM_XBUTTONDBLCLK
- WM_XBUTTONDOWN
- WM_XBUTTONUP
- MOUSEHOOKSTRUCTEX
Die folgenden APIs wurden geändert, um diese Schaltflächen zu unterstützen:
Es ist unwahrscheinlich, dass ein untergeordnetes Fenster in einer Komponentenanwendung Befehle für XBUTTON1 und XBUTTON2 direkt implementieren kann. Daher sendet DefWindowProc eine WM_APPCOMMAND Nachricht an ein Fenster, wenn auf eine X-Schaltfläche geklickt wird. DefWindowProc sendet die Nachricht WM_APPCOMMAND an das übergeordnete Fenster. Dies ähnelt der Art und Weise, wie Kontextmenüs mit einem Rechtsklick aufgerufen werden –DefWindowProc sendet eine WM_CONTEXTMENU-Nachricht an das Menü und sendet sie auch an das übergeordnete Menü. WennDefWindowProc zusätzlich eine WM_APPCOMMAND-Nachricht für ein Fenster der obersten Ebene empfängt, wird außerdem ein Shell-Hook mit dem Code HSHELL_APPCOMMAND aufgetreten.
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 das Browsen und andere Funktionen.
Mausnachrichten
Die Maus generiert ein Eingabeereignis, wenn der Benutzer die Maus bewegt oder eine Maustaste drückt oder loslässt. Das System konvertiert Mauseingabeereignisse in Nachrichten und sendet sie in die Nachrichtenwarteschlange des entsprechenden Threads. Wenn Mausnachrichten schneller gepostet werden, als ein Thread sie verarbeiten kann, verwirft das System alle, aber die letzte Mausnachricht.
Ein Fenster empfängt eine Mausnachricht, wenn ein Mausereignis auftritt, während sich der Cursor innerhalb der Rahmen des Fensters befindet oder wenn das Fenster die Maus erfasst hat. Mausnachrichten sind in zwei Gruppen unterteilt: Clientbereichsnachrichten und Nichtclientbereichsnachrichten. In der Regel verarbeitet eine Anwendung Clientbereichsmeldungen und ignoriert Nichtclientbereichsnachrichten.
Dieser Abschnitt enthält die folgenden Themen:
Clientbereich Mausnachrichten
Ein Fenster empfängt eine Clientbereichs-Mausnachricht, wenn ein Mausereignis innerhalb des Clientbereichs des Fensters auftritt. Das System sendet die WM_MOUSEMOVE Nachricht an das Fenster, wenn der Benutzer den Cursor innerhalb des Clientbereichs verschiebt. Er sendet eine der folgenden Meldungen, wenn der Benutzer eine Maustaste drückt oder loslässt, während sich der Cursor im Clientbereich befindet.
`Message` | Bedeutung |
---|---|
WM_LBUTTONDBLCLK | Die linke Maustaste wurde doppelt angeklickt. |
WM_LBUTTONDOWN | Die linke Maustaste wurde gedrückt. |
WM_LBUTTONUP | Die linke Maustaste wurde losgelassen. |
WM_MBUTTONDBLCLK | Die mittlere Maustaste wurde doppelt angeklickt. |
WM_MBUTTONDOWN | Die mittlere Maustaste wurde gedrückt. |
WM_MBUTTONUP | Die mittlere Maustaste wurde losgelassen. |
WM_RBUTTONDBLCLK | Die rechte Maustaste wurde doppelt angeklickt. |
WM_RBUTTONDOWN | Die rechte Maustaste wurde gedrückt. |
WM_RBUTTONUP | Die rechte Maustaste wurde losgelassen. |
WM_XBUTTONDBLCLK | Eine X-Maustaste wurde doppelt angeklickt. |
WM_XBUTTONDOWN | Eine X-Maustaste wurde gedrückt. |
WM_XBUTTONUP | Eine X-Maustaste wurde losgelassen. |
Darüber hinaus kann eine Anwendung die TrackMouseEvent-Funktion aufrufen, damit das System zwei weitere Nachrichten sendet. Sie sendet die WM_MOUSEHOVER Nachricht, wenn der Cursor für einen bestimmten Zeitraum über den Clientbereich bewegt wird. Sie sendet die WM_MOUSELEAVE Nachricht, wenn der Cursor den Clientbereich verlässt.
Meldungsparameter
Der lParam-Parameter einer Clientbereich-Mausnachricht gibt die Position des Cursors an. Das Wort mit niedriger Reihenfolge gibt die X-Koordinate des Hotspots an, und das Wort "Hochreihenfolge" 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 wParam-Parameter enthält Flags, die den Status der anderen Maustasten sowie die STRG- und UMSCHALT-Tasten zum Zeitpunkt des Mausereignisses angeben. Sie können diese Kennzeichnungen überprüfen, wenn die Verarbeitung von Mausnachrichten vom Status einer anderen Maustaste oder von der STRG- oder UMSCHALTTASTE abhängt. Der wParam-Parameter kann eine Kombination aus den 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 UMSCHALT-Taste ist gedrückt. |
MK_XBUTTON1 | Die erste X-Taste ist ausgefallen. |
MK_XBUTTON2 | Die zweite X-Taste ist ausgefallen. |
Doppelklicken auf Nachrichten
Das System generiert eine Doppelklicknachricht, wenn der Benutzer zweimal hintereinander auf eine Maustaste klickt. Wenn der Benutzer auf eine Schaltfläche klickt, richtet das System ein Rechteck an, das sich um den Cursor-Hotspot zentriert befindet. Außerdem wird die Uhrzeit markiert, zu der der Klick aufgetreten ist. Wenn der Benutzer ein zweites Mal auf dieselbe Schaltfläche klickt, bestimmt das System, ob sich der Hotspot noch innerhalb des Rechtecks befindet und die seit dem ersten Klick verstrichene Zeit berechnet. Wenn sich der Hotspot noch innerhalb des Rechtecks befindet und die verstrichene Zeit den Timeoutwert mit Doppelklick nicht überschreitet, generiert das System eine Doppelklicknachricht.
Eine Anwendung kann Timeoutwerte mit Doppelklick abrufen und festlegen, indem die GetDoubleClickTime und die SetDoubleClickTime-Funktionen verwendet werden. Alternativ kann die Anwendung den Timeoutwert mit Doppelklick festlegen, indem sie das SPI_SETDOUBLECLICKTIME-Flag mit der SystemParametersInfo-Funktion verwenden. Sie kann auch die Größe des Rechtecks festlegen, das vom System zum Erkennen von Doppelklicks verwendet wird, indem die SPI_SETDOUBLECLKWIDTH und SPI_SETDOUBLECLKHEIGHT Flags an SystemParametersInfo übergeben werden. Beachten Sie jedoch, dass sich das Festlegen des Timeoutwerts mit Doppelklick und Rechteck auf alle Anwendungen auswirkt.
Ein anwendungsdefiniertes Fenster empfängt standardmäßig keine Doppelklicknachrichten. Aufgrund des Systemaufwands beim Generieren von Doppelklicknachrichten werden diese Nachrichten nur für Fenster generiert, die zu Klassen gehören, die den CS_DBLCLKS Klassenstil aufweisen. Ihre Anwendung muss diese Formatvorlage beim Registrieren der Fensterklasse festlegen. Weitere Informationen finden Sie unter Fensterklassen.
Eine Doppelklicknachricht ist immer die dritte Nachricht in einer Vier-Nachrichten-Serie. Die ersten beiden Nachrichten sind die Schaltflächen-Down- und Schaltflächen-up-Nachrichten, die durch den ersten Klick generiert werden. Der zweite Klick generiert die Doppelklicknachricht gefolgt von einer anderen Schaltflächen-up-Nachricht. Ein Doppelklick mit der linken Maustaste erzeugt beispielsweise folgende Meldungssequenz:
Da ein Fenster immer eine Schaltflächen-down-Nachricht empfängt, bevor eine Doppelklicknachricht empfangen wird, verwendet eine Anwendung in der Regel eine Doppelklicknachricht, um eine Aufgabe zu erweitern, die während einer Schaltflächen-Down-Nachricht begonnen wurde. Wenn der Benutzer beispielsweise auf eine Farbe in der Farbpalette von Microsoft Paint klickt, zeigt Paint die ausgewählte Farbe neben der Palette an. Wenn der Benutzer auf eine Farbe doppelklicken, zeigt Paint die Farbe an und öffnet das Dialogfeld "Farben bearbeiten".
Non-Clientbereich Mausnachrichten
Ein Fenster empfängt eine Nichtclientbereichs-Mausnachricht, wenn ein Mausereignis in einem beliebigen Teil eines Fensters mit Ausnahme des Clientbereichs auftritt. Der Nichtclientbereich eines Fensters besteht aus dem Rahmen, der Menüleiste, der Titelleiste, der Bildlaufleiste, dem Fenstermenü, der Schaltfläche "Minimieren" und der Schaltfläche "Maximieren".
Das System generiert Nachrichten im Nichtclientbereich in erster Linie für die eigene Verwendung. Das System verwendet z. B. Nichtclientbereichsmeldungen, um den Cursor in einen Pfeil mit zwei Spitzen zu ändern, wenn sich der Cursor in den Rahmen eines Fensters bewegt. Ein Fenster muss Mausmeldungen im Nichtclientbereich an die DefWindowProc-Funktion übergeben, um die integrierte Mausschnittstelle zu nutzen.
Es gibt eine entsprechende Nichtclientbereichs-Mausnachricht für jede Clientbereichs-Mausnachricht. Die Namen dieser Nachrichten sind ähnlich, mit der Ausnahme, dass die benannten Konstanten für die Nichtclientbereichsnachrichten die Buchstaben NC enthalten. Wenn Sie z. B. den Cursor im Nichtclientbereich bewegen, wird eine WM_NCMOUSEMOVE-Nachricht generiert, und das Drücken der linken Maustaste, während sich der Cursor im Nichtclientbereich befindet, generiert eine WM_NCLBUTTONDOWN-Nachricht.
Der lParam-Parameter einer Nichtclientbereichs-Mausnachricht ist eine Struktur, die die X- und Y-Koordinaten des Cursor-Hotspots enthält. Im Gegensatz zu Koordinaten von Clientbereichs-Mausmeldungen werden die Koordinaten in Bildschirmkoordinaten und nicht in Clientkoordinaten angegeben. Im Bildschirmkoordinatensystem beziehen sich alle Punkte auf dem Bildschirm auf die Koordinaten (0,0) der oberen linken Ecke des Bildschirms.
Der wParam-Parameter enthält einen Treffertestwert, einen Wert, der angibt, wo im Nichtclientbereich das Mausereignis aufgetreten ist. Im folgenden Abschnitt wird der Zweck der Treffertestwerte erläutert.
Die WM_NCHITTEST-Meldung
Jedes Mal, wenn ein Mausereignis auftritt, sendet das System eine WM_NCHITTEST Nachricht an das Fenster, das den Cursor hot spot enthält, oder an das Fenster, das die Maus erfasst hat. Das System verwendet diese Nachricht, um zu bestimmen, ob eine Clientbereich- oder nichtclientbereichs-Mausnachricht gesendet werden soll. Eine Anwendung, die Mausbewegungs- und Maustastenmeldungen empfangen muss, muss die WM_NCHITTEST Nachricht an die DefWindowProc-Funktion übergeben.
Der lParam-Parameter der WM_NCHITTEST Nachricht enthält die Bildschirmkoordinaten des Cursor-Hotspots. Die DefWindowProc-Funktion untersucht die Koordinaten und gibt einen Treffertestwert zurück, der die Position des Hotspots angibt. Der Hit-Test kann einer der folgenden Werte sein:
Wert | Ort 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 Schließen-Schaltfläche 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 derzeit von einem anderen Fenster im selben Thread abgedeckt wird. |
HTVSCROLL | In der vertikalen Bildlaufleiste. |
HTZOOM | In einer Schaltfläche Maximieren. |
Wenn sich der Cursor im Clientbereich eines Fensters befindet, gibt DefWindowProc den HTCLIENTHittestwert an die Fensterprozedur zurück. Wenn die Fensterprozedur diesen Code an das System zurückgibt, konvertiert das System die Bildschirmkoordinaten des Cursors in Clientkoordinaten und sendet dann die entsprechende Clientbereichs-Mausmeldung.
Die DefWindowProc-Funktion gibt einen der anderen Treffertestwerte zurück, wenn sich der Cursor im Nichtclientbereich eines Fensters befindet. Wenn die Fensterprozedur einen dieser Treffertestwerte zurückgibt, sendet das System eine Nichtclientbereichs-Mausnachricht, wobei der Treffertestwert im wParam-Parameter der Nachricht und die Cursorkoordinaten im lParam-Parameter platziert werden.
Maus-Sonar
Das Barrierefreiheitsfeature "Maus-Sonar" zeigt kurz mehrere konzentrische Kreise um den Mauszeiger an, wenn der Benutzer die STRG-TASTE drückt und loslässt. Dieses Feature hilft einem Benutzer, den Mauszeiger auf einem Bildschirm zu finden, der überladen ist oder die Auflösung auf "Hoch", auf einem Monitor mit schlechter Qualität oder für Benutzer mit eingeschränktem Sehvermögen festgelegt ist. Weitere Informationen finden Sie unter den folgenden Flags in SystemParametersInfo:
SPI_GETMOUSESONAR
SPI_SETMOUSESONAR
Maus vanish
Die Barrierefreiheitsfunktion „Mouse Vanish“ verbirgt den Zeiger, während der Benutzer tippt. Der Mauszeiger wird wieder angezeigt, wenn der Benutzer die Maus bewegt. Dieses Feature verhindert, dass der Zeiger den eingegebenen Text, z. B. in einer E-Mail oder einem anderen Dokument, verschleiert. Weitere Informationen finden Sie unter den folgenden Flags in SystemParametersInfo:
SPI_GETMOUSEVANISH
SPI_SETMOUSEVANISH
Das Mausrad
Das Mausrad kombiniert die Features eines Rads und einer Maustaste. Das Rad verfügt über diskrete, gleichmäßig angeordnete Noten. Wenn Sie das Rad drehen, wird eine Radnachricht an Ihre Anwendung gesendet, da jede Klammer gefunden wird. Die Radtaste kann auch als normale Windows-Mitteltaste (Dritte) ausgeführt werden. Durch Drücken und Loslassen des Mausrads werden Standardnachrichten WM_MBUTTONUP und WM_MBUTTONDOWN gesendet. Durch Doppelklicken auf die dritte Schaltfläche wird die Standard-WM_MBUTTONDBLCLK Nachricht gesendet.
Das Mausrad wird durch die WM_MOUSEWHEEL Nachricht unterstützt.
Durch Drehen der Maus wird die WM_MOUSEWHEEL Nachricht an das Fokusfenster gesendet. Die Funktion DefWindowProc gibt die Meldung an das übergeordnete Fenster weiter. Es sollte keine interne Weiterleitung der Meldung erfolgen, da DefWindowProc sie in der übergeordneten Kette so lange weitergibt, bis ein Fenster gefunden ist, in dem sie verarbeitet wird.
Bestimmen der Anzahl der Bildlaufzeilen
Anwendungen sollten die SystemParametersInfo-Funktion verwenden, um die Anzahl der Zeilen abzurufen, die ein Dokument für jeden Bildlaufvorgang scrollt (Radnotch). Um die Anzahl der Zeilen abzurufen, ruft eine Anwendung den folgenden Aufruf ab:
SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, pulScrollLines, 0)
Die Variable "pulScrollLines" verweist auf einen ganzzahligen Wert ohne Vorzeichen, der die vorgeschlagene Anzahl von Zeilen empfängt, um zu scrollen, wenn das Mausrad ohne Zusatztasten gedreht wird:
- Wenn diese Zahl 0 ist, sollte kein Bildlauf erfolgen.
- Wenn diese Zahl WHEEL_PAGESCROLL ist, sollte ein Radrollen so interpretiert werden, dass er einmal in den Seitenab- oder Seitenaufwärtsbereichen der Bildlaufleiste klickt.
- Wenn die Anzahl der Zulaufzeilen größer als die Anzahl der anzuzeigenden Zeilen ist, sollte der Bildlaufvorgang auch als Bildlaufvorgang nach unten oder nach oben interpretiert werden.
Der Standardwert für die Anzahl der Bildlaufzeilen lautet 3. Wenn ein Benutzer die Anzahl der Bildlaufzeilen ändert, sendet das Betriebssystem mithilfe des Blatts "Mauseigenschaften" in Systemsteuerung eine WM_SETTINGCHANGE Nachricht an alle Fenster der obersten Ebene, wobei SPI_SETWHEELSCROLLLINES angegeben sind. Wenn eine Anwendung die WM_SETTINGCHANGE Nachricht empfängt, kann sie die neue Anzahl von Bildlaufzeilen abrufen, indem Sie Folgendes aufrufen:
SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, pulScrollLines, 0)
Steuerelemente, die scrollen
In der folgenden Tabelle sind die Steuerelemente mit Bildlauffunktionen aufgeführt (einschließlich bildlaufzeilen, die vom Benutzer festgelegt wurden).
Control | Scrollen |
---|---|
Bearbeitungssteuerelement | Vertikal und horizontal. |
List Box-Steuerelement | Vertikal und horizontal. |
Kombinationsfeld | Wenn sie nicht abgelegt wird, ruft jeder Bildlauf das nächste oder vorherige Element ab. Beim Ablegen leitet jeder Bildlauf die Nachricht an das Listenfeld weiter, das entsprechend scrollt. |
CMD (Befehlszeile) | Vertikal |
Strukturansicht | Vertikal und horizontal. |
Listenansicht | Vertikal und horizontal. |
Bildlauf nach oben/unten | Ein Element nach dem anderen. |
Titelleisten-Bildlauf | Ein Element nach dem anderen. |
Microsoft Rich Edit 1.0 | Vertikal Beachten Sie, dass der Exchange-Client über eigene Versionen der Listenansichts- und Strukturansichtssteuerelemente verfügt, die keine Radunterstützung haben. |
Microsoft Rich Edit 2.0 | Vertikal |
Erkennen einer Maus mit einem Rad
Um festzustellen, ob eine Maus mit einem Rad verbunden ist, rufen Sie GetSystemMetrics mit SM_MOUSEWHEELPRESENT auf. Ein Rückgabewert von 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 auf oberster Ebene oder auf das untergeordnete Fenster eines inaktiven Fensters der obersten Ebene klickt, sendet das System die WM_MOUSEACTIVATE Nachricht (unter anderem) an das Fenster der obersten Ebene oder des untergeordneten Fensters. Das System sendet diese Nachricht nach dem Veröffentlichen der WM_NCHITTEST Nachricht in das Fenster, aber vor dem Veröffentlichen der Schaltflächen-down-Nachricht. Wenn WM_MOUSEACTIVATE an die Funktion DefWindowProcübergeben wird, aktiviert das System das Fenster der obersten Ebene und sendet anschließend die Button-Down-Nachricht 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 durch einen Mausklick zum aktiven Fenster wird und ob das angeklickte Fenster die nachfolgende Button-Down-Meldung erhält. Dies geschieht durch Zurückgeben eines der folgenden Werte nach der Verarbeitung WM_MOUSEACTIVATE.
Wert | Bedeutung |
---|---|
MA_ACTIVATE | Aktiviert das Fenster und verwirft die Mausmeldung nicht. |
MA_NOACTIVATE | Aktiviert nicht das Fenster und verwirft nicht die Mausmeldung. |
MA_ACTIVATEANDEAT | Aktiviert das Fenster und verwirft die Mausmeldung. |
MA_NOACTIVATEANDEAT | Aktiviert nicht das Fenster, verwirft aber die Mausmeldung. |