WM_SYSCOMMAND meddelande

Ett fönster tar emot det här meddelandet när användaren väljer ett kommando från menyn Fönster (kallades tidigare system- eller kontrollmenyn) eller när användaren väljer knappen Maximera, minimera knappen, återställningsknappen eller stäng knappen.

#define WM_SYSCOMMAND                   0x0112

Example

 case WM_SYSCOMMAND:
        if ((wParam & 0xFFF0) == SC_CLOSE)
        {
            EndDialog (hDlg, TRUE);
            return(TRUE);
        }
        break;

Exempel från klassiska Windows-exempel på GitHub.

Parameterar

wParam

Typ av systemkommando som begärs. De fyra lågordningsbitarna i wParam-parametern används internt av systemet. Bits 4-15 innehåller en kommandokod som kan vara ett av följande värden.

Värde Meaning
SC_CLOSE
0xF060
Stänger fönstret.
SC_CONTEXTHELP
0xF180
Ändrar markören till ett frågetecken med en pekare. Om användaren sedan klickar på en kontroll i dialogrutan får kontrollen ett WM_HELP meddelande.
SC_DEFAULT
0xF160
Väljer standardobjektet. dubbelklickat på fönstermenyn.
SC_HOTKEY
0xF150
Aktiverar fönstret som är associerat med den programdefinierade snabbnyckeln. Parametern lParam identifierar fönstret som ska aktiveras.
SC_HSCROLL
0xF080
Rullar vågrätt.
SC_KEYMENU
0xF100
Hämtar fönstermenyn som ett resultat av en tangenttryckning. Mer information finns i avsnittet Anmärkningar.
SC_MAXIMIZE
0xF030
Maximerar fönstret.
SC_MINIMIZE
0xF020
Minimerar fönstret.
SC_MONITORPOWER
0xF170
Anger visningstillståndet. Det här kommandot stöder enheter som har energisparfunktioner, till exempel en batteridriven persondator.
Parametern lParam kan ha följande värden:
  • -1 (skärmen är aktiverad)
  • 1 (skärmen kommer att ha låg effekt)
  • 2 (skärmen stängs av)
SC_MOUSEMENU
0xF090
Hämtar fönstermenyn som ett resultat av ett musklick.
SC_MOVE
0xF010
Flyttar fönstret.
SC_NEXTWINDOW
0xF040
Flyttas till nästa fönster.
SC_PREVWINDOW
0xF050
Flyttar till föregående fönster.
SC_RESTORE
0xF120
Återställer fönstret till sin normala position och storlek.
SC_SCREENSAVE
0xF140
Kör skärmsläckarprogrammet som anges i avsnittet [boot] i System.ini-filen.
SC_SIZE
0xF000
Storleksanpassar fönstret.
SC_TASKLIST
0xF130
Aktiverar Start-menyn .
SC_VSCROLL
0xF070
Rullar lodrätt.

Om kommandokoden är SC_SCREENSAVE är följande flaggor tillgängliga i de fyra lågordningsbitarna:

Flag Meaning
SCF_ISSECURE
0x0001
Skärmsläckaren är säker.

lParam

Ordet med låg ordning anger markörens vågräta position, i skärmkoordinater, om ett fönstermenykommando väljs med musen. Annars används inte den här parametern.

Ordet med hög ordning anger markörens lodräta position, i skärmkoordinater, om ett fönstermenykommando väljs med musen. Den här parametern är 1 om kommandot väljs med hjälp av en systemaccelerator eller noll om du använder en mnemonic.

Returvärde

Ett program bör returnera noll om det bearbetar det här meddelandet.

Anmärkningar

Använd följande kod för att hämta positionskoordinaterna i skärmkoordinater:

xPos = GET_X_LPARAM(lParam);    // horizontal position 
yPos = GET_Y_LPARAM(lParam);    // vertical position

Funktionen DefWindowProc utför en fönstermenybegäran för de fördefinierade åtgärder som anges i föregående tabell.

I WM_SYSCOMMAND meddelanden används de fyra lågordningsbitarna i wParam-parametern internt av systemet. För att hämta kommandokoden från wParam-värdet måste ett program kombinera värdet 0xFFF0 med wParam-värdet med hjälp av bitvis AND-operatorn, som du ser i exemplet ovan.

Menyalternativen i en fönstermeny kan ändras med hjälp av funktionerna GetSystemMenu, AppendMenu, InsertMenu, ModifyMenu, InsertMenuItem och SetMenuItemInfo . Program som ändrar fönstermenyn måste bearbeta WM_SYSCOMMAND meddelanden.

Ett program kan när som helst utföra valfritt systemkommando genom att skicka ett WM_SYSCOMMAND meddelande till DefWindowProc. Alla WM_SYSCOMMAND meddelanden som inte hanteras av programmet måste skickas till DefWindowProc. Alla kommandovärden som läggs till av ett program måste bearbetas av programmet och kan inte skickas till DefWindowProc.

Om lösenordsskydd är aktiverat av principen startas skärmsläckaren oavsett vad ett program gör med SC_SCREENSAVE-meddelandet även om det inte går att skicka det till DefWindowProc.

Acceleratornycklar som har definierats för att välja objekt från fönstermenyn översätts till WM_SYSCOMMAND meddelanden. alla andra tangenttryckningar i acceleratorn översätts till WM_COMMAND meddelanden.

Om wParamär SC_KEYMENU innehåller lParam teckenkoden för nyckeln som används med ALT-tangenten för att visa popup-menyn. Om du till exempel trycker på ALT+F för att visa popup-fönstret Arkiv, orsakas en WM_SYSCOMMAND med wParam lika med SC_KEYMENU och lParam lika med "f".

Kravspecifikation

Krav Värde
Lägsta klient som stöds
Windows 2000 Professional [endast skrivbordsappar]
Lägsta server som stöds
Windows 2000 Server [endast skrivbordsappar]
Header
Winuser.h (inkludera Windows.h)

Se även

Referens

Lägg tillMenu

DefWindowProc

GET_X_LPARAM

GET_Y_LPARAM

GetSystemMenu

InsertMenu

ModifyMenu

WM_COMMAND

Konceptuell

Tangentbordsacceleratorer