WM_SYSCOMMAND Nachricht
Ein Fenster empfängt diese Nachricht, wenn der Benutzer einen Befehl aus dem Fenstermenü (ehemals als System oder Steuerelementmenü bezeichnet) oder wenn der Benutzer die Maximierungsschaltfläche, die Schaltfläche minimieren, die Schaltfläche wiederherstellen oder die Schaltfläche schließen auswählt.
#define WM_SYSCOMMAND 0x0112
Beispiel
case WM_SYSCOMMAND:
if (wParam == SC_CLOSE)
{
EndDialog (hDlg, TRUE);
return(TRUE);
}
break;
Beispiel aus Windows klassischen Beispielen auf GitHub.
Parameter
-
wParam
-
Der Typ des angeforderten Systembefehls. Dieser Parameter kann einen der folgenden Werte annehmen.
Wert Bedeutung - SC_CLOSE
- 0xF060
Schließt das Fenster. - SC_CONTEXTHELP
- 0xF180
Ändert den Cursor in ein Fragezeichen mit einem Zeiger. Wenn der Benutzer dann im Dialogfeld auf ein Steuerelement klickt, erhält das Steuerelement eine WM_HELP Nachricht. - SC_DEFAULT
- 0xF160
Wählt das Standardelement aus; Der Benutzer doppelklicken auf das Fenstermenü. - SC_HOTKEY
- 0xF150
Aktiviert das Fenster, das dem anwendungsspezifischen Hot Key zugeordnet ist. Der lParam-Parameter identifiziert das zu aktivierende Fenster. - SC_HSCROLL
- 0xF080
Bildlauf horizontal. - SCF_ISSECURE
- 0x00000001
Gibt an, ob der Bildschirmspeicher sicher ist. - SC_KEYMENU
- 0xF100
Ruft das Fenstermenü als Ergebnis einer Tasteneingabe ab. Weitere Informationen finden Sie im Abschnitt mit Hinweisen. - SC_MAXIMIZE
- 0xF030
Maximiert das Fenster. - SC_MINIMIZE
- 0xF020
Minimiert das Fenster. - SC_MONITORPOWER
- 0xF170
Legt den Zustand der Anzeige fest. Dieser Befehl unterstützt Geräte, die über Stromsparfunktionen verfügen, z. B. einen akkubetriebenen Persönlichen Computer.
Der Parameter lParam kann die folgenden Werte aufweisen:- -1 (die Anzeige wird aktiviert)
- 1 (die Anzeige wird zu niedriger Leistung)
- 2 (die Anzeige wird deaktiviert)
- SC_MOUSEMENU
- 0xF090
Ruft das Fenstermenü als Ergebnis eines Mausklicks ab. - SC_MOVE
- 0xF010
Verschiebt das Fenster. - SC_NEXTWINDOW
- 0xF040
Wechselt zum nächsten Fenster. - SC_PREVWINDOW
- 0xF050
Wechselt zum vorherigen Fenster. - SC_RESTORE
- 0xF120
Wiederherstellen des Fensters auf die normale Position und Größe. - SC_SCREENSAVE
- 0xF140
Führt die im Abschnitt [start] der System.ini Datei angegebene Bildschirmspeicheranwendung aus. - SC_SIZE
- 0xF000
Größen des Fensters. - SC_TASKLIST
- 0xF130
Aktiviert das Startmenü . - SC_VSCROLL
- 0xF070
Scrollt vertikal. -
lParam
-
Das Wort mit niedriger Reihenfolge gibt die horizontale Position des Cursors in Bildschirmkoordinaten an, wenn ein Fenstermenübefehl mit der Maus ausgewählt wird. Andernfalls wird dieser Parameter nicht verwendet.
Das Wort mit hoher Reihenfolge gibt die vertikale Position des Cursors in Bildschirmkoordinaten an, wenn ein Fenstermenübefehl mit der Maus ausgewählt wird. Dieser Parameter ist 1, wenn der Befehl mithilfe einer Systemtaste oder null ausgewählt wird, wenn ein mnemonic verwendet wird.
Rückgabewert
Eine Anwendung sollte null zurückgeben, wenn diese Nachricht verarbeitet wird.
Bemerkungen
Um die Positionkoordinaten in Bildschirmkoordinaten abzurufen, verwenden Sie den folgenden Code:
xPos = GET_X_LPARAM(lParam); // horizontal position
yPos = GET_Y_LPARAM(lParam); // vertical position
Die Funktion DefWindowProc führt die Fenstermenüanforderung für die vordefinierten Aktionen aus, die in der vorherigen Tabelle angegeben sind.
In WM_SYSCOMMAND Nachrichten werden die vier Niedrigreihenfolgen des wParam-Parameters intern vom System verwendet. Zum Abrufen des richtigen Ergebnisses beim Testen des Werts von wParam muss eine Anwendung den Wert 0xFFF0 mit dem wParam-Wert kombinieren, indem Sie den Bitzeiger UND-Operator verwenden.
Die Menüelemente in einem Fenstermenü können mithilfe der Funktionen "GetSystemMenu", "AppendMenu", "InsertMenu", "ModifyMenu", "InsertMenuItem" und "SetMenuItemInfo" geändert werden. Anwendungen, die das Fenstermenü ändern, müssen WM_SYSCOMMAND Nachrichten verarbeiten.
Eine Anwendung kann jederzeit einen beliebigen Systembefehl ausführen, indem sie eine WM_SYSCOMMAND Nachricht an DefWindowProc übergeben. Alle WM_SYSCOMMAND Nachrichten, die von der Anwendung nicht behandelt werden, müssen an DefWindowProc übergeben werden. Alle von einer Anwendung hinzugefügten Befehlswerte müssen von der Anwendung verarbeitet werden und können nicht an DefWindowProc übergeben werden.
Wenn der Kennwortschutz durch Richtlinie aktiviert ist, wird der Bildschirmspeicher unabhängig davon gestartet, was eine Anwendung mit der SC_SCREENSAVE Benachrichtigung tut, auch wenn sie nicht an DefWindowProc übergeben wird.
Tastenkombinationen, die definiert sind, um Elemente aus dem Fenstermenü auszuwählen, werden in WM_SYSCOMMAND Nachrichten übersetzt; Alle anderen Tastenkombinationen werden in WM_COMMAND Nachrichten übersetzt.
Wenn der wParamSC_KEYMENU ist, enthält lParam den Zeichencode des Schlüssels, der mit der ALT-TASTE verwendet wird, um das Popupmenü anzuzeigen. Wenn Sie z. B. ALT+F drücken, um das Popup "Datei" anzuzeigen, wird eine WM_SYSCOMMAND mit wParam mit SC_KEYMENU und lParam gleich "f" verursacht.
Requirements (Anforderungen)
| Anforderung | Wert |
|---|---|
| Unterstützte Mindestversion (Client) |
Windows 2000 Professional [nur Desktop-Apps] |
| Unterstützte Mindestversion (Server) |
Windows 2000 Server [nur Desktop-Apps] |
| Header |
|