Udostępnij przez


komunikat WM_SYSCOMMAND

Okno otrzymuje ten komunikat, gdy użytkownik wybierze polecenie z menu Okno (wcześniej znane jako menu systemowe lub sterujące) lub gdy użytkownik wybierze przycisk Maksymalizuj, zminimalizuj przycisk, przywróć przycisk lub zamknij przycisk.

#define WM_SYSCOMMAND                   0x0112

Example

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

Przykład z Windows Classic Samples w witrynie GitHub.

Parametry

wParam

Żądany typ polecenia systemowego. Cztery bity o niskiej kolejności parametru wParam są używane wewnętrznie przez system. Bity 4–15 zawierają kod polecenia, który może być jedną z następujących wartości.

Wartość Meaning
SC_CLOSE
0xF060
Zamyka okno.
SC_CONTEXTHELP
0xF180
Zmienia kursor na znak zapytania ze wskaźnikiem. Jeśli użytkownik kliknie kontrolkę w oknie dialogowym, kontrolka otrzyma komunikat WM_HELP .
SC_DEFAULT
0xF160
Wybiera element domyślny; użytkownik dwukrotnie kliknął menu okna.
SC_HOTKEY
0xF150
Aktywuje okno skojarzone z określonym przez aplikację kluczem gorącym. Parametr lParam identyfikuje okno do aktywowania.
SC_HSCROLL
0xF080
Przewija się w poziomie.
SC_KEYMENU
0xF100
Pobiera menu okna w wyniku naciśnięcia. Aby uzyskać więcej informacji, zobacz sekcję Uwagi.
SC_MAXIMIZE
0xF030
Maksymalizuje okno.
SC_MINIMIZE
0xF020
Minimalizuje okno.
SC_MONITORPOWER
0xF170
Ustawia stan wyświetlania. To polecenie obsługuje urządzenia z funkcjami oszczędzania energii, takimi jak komputer osobisty zasilany z baterii.
Parametr lParam może mieć następujące wartości:
  • -1 (wyświetlacz jest włączony)
  • 1 (wyświetlacz będzie niski)
  • 2 (ekran jest wyłączany)
SC_MOUSEMENU
0xF090
Pobiera menu okna w wyniku kliknięcia myszą.
SC_MOVE
0xF010
Przenosi okno.
SC_NEXTWINDOW
0xF040
Przechodzi do następnego okna.
SC_PREVWINDOW
0xF050
Przechodzi do poprzedniego okna.
SC_RESTORE
0xF120
Przywraca normalne położenie i rozmiar okna.
SC_SCREENSAVE
0xF140
Wykonuje aplikację wygaszacza ekranu określoną w sekcji [boot] pliku System.ini.
SC_SIZE
0xF000
Rozmiary okna.
SC_TASKLIST
0xF130
Aktywuje menu Start .
SC_VSCROLL
0xF070
Przewija się w pionie.

Jeśli kod polecenia jest SC_SCREENSAVE, następujące flagi są dostępne w czterech bitach o niskiej kolejności:

Flag Meaning
SCF_ISSECURE
0x0001
Wygaszacz ekranu jest bezpieczny.

lParam

Wyraz o niskiej kolejności określa położenie kursora w poziomie, we współrzędnych ekranu, jeśli polecenie menu okna jest wybierane za pomocą myszy. W przeciwnym razie ten parametr nie jest używany.

Wyraz o wysokiej kolejności określa położenie kursora w pionie we współrzędnych ekranu, jeśli polecenie menu okna jest wybierane za pomocą myszy. Ten parametr jest 1, jeśli polecenie jest wybierane przy użyciu akceleratora systemu lub zero, jeśli używa mnemonic.

Wartość zwracana

Aplikacja powinna zwrócić zero, jeśli przetwarza ten komunikat.

Uwagi

Aby uzyskać współrzędne położenia we współrzędnych ekranu, użyj następującego kodu:

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

Funkcja DefWindowProc wykonuje żądanie menu okna dla wstępnie zdefiniowanych akcji określonych w poprzedniej tabeli.

W WM_SYSCOMMAND komunikatach cztery bity o niskiej kolejności parametru wParam są używane wewnętrznie przez system. Aby uzyskać kod polecenia z wartości wParam , aplikacja musi połączyć wartość 0xFFF0 z wartością wParam przy użyciu operatora bitowego AND, jak pokazano w powyższym przykładzie.

Elementy menu w menu okna można modyfikować przy użyciu funkcji GetSystemMenu, AppendMenu, InsertMenu, ModifyMenu, InsertMenuItem i SetMenuItemInfo . Aplikacje modyfikujące menu okna muszą przetwarzać komunikaty WM_SYSCOMMAND .

Aplikacja może w dowolnym momencie wykonać dowolne polecenie systemowe, przekazując komunikat WM_SYSCOMMAND do defWindowProc. Wszystkie komunikaty WM_SYSCOMMAND nieobsługiwane przez aplikację muszą być przekazywane do aplikacji DefWindowProc. Wszystkie wartości poleceń dodane przez aplikację muszą być przetwarzane przez aplikację i nie mogą być przekazywane do defWindowProc.

Jeśli ochrona haseł jest włączona przez zasady, wygaszacz ekranu jest uruchamiany niezależnie od tego, co aplikacja robi z powiadomieniem SC_SCREENSAVE , nawet jeśli nie można przekazać go do DefWindowProc.

Klucze akceleratora zdefiniowane do wybierania elementów z menu okna są tłumaczone na komunikaty WM_SYSCOMMAND ; wszystkie inne naciśnięcia akceleratora są tłumaczone na komunikaty WM_COMMAND .

Jeśli parametr wParam jest SC_KEYMENU, lParam zawiera kod znaku klucza, który jest używany z ALT do wyświetlania menu podręcznego. Na przykład naciśnięcie ALT+F w celu wyświetlenia wyskakującego okienka Plik spowoduje, że WM_SYSCOMMAND z parametrem wParamrównym SC_KEYMENU i lParam równy 'f'.

Requirements

Wymaganie Wartość
Minimalny obsługiwany klient
Windows 2000 Professional [tylko aplikacje klasyczne]
Minimalny obsługiwany serwer
Windows 2000 Server [tylko aplikacje klasyczne]
Header
Winuser.h (uwzględnij windows.h)

Zobacz także

Referencja

AppendMenu

DefWindowProc

GET_X_LPARAM

GET_Y_LPARAM

GetSystemMenu

InsertMenu

ModifyMenu

WM_COMMAND

Pojęciowy

Akceleratory klawiatury