messaggio WM_SYSCOMMAND

Una finestra riceve questo messaggio quando l'utente sceglie un comando dal menu Finestra (in precedenza noto come menu di sistema o controllo) o quando l'utente sceglie il pulsante ingrandisce, riduce al minimo il pulsante, il pulsante di ripristino o il pulsante chiudi.

#define WM_SYSCOMMAND                   0x0112

Esempio

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

Esempio di esempi classici di Windows in GitHub.

Parametri

wParam

Tipo di comando di sistema richiesto. Questo parametro può avere uno dei valori seguenti.

Valore Significato
SC_CLOSE
0xF060
Chiude la finestra.
SC_CONTEXTHELP
0xF180
Modifica il cursore in un punto interrogativo con un puntatore. Se l'utente fa clic su un controllo nella finestra di dialogo, il controllo riceve un messaggio WM_HELP .
SC_DEFAULT
0xF160
Seleziona l'elemento predefinito; l'utente ha fatto doppio clic sul menu della finestra.
SC_HOTKEY
0xF150
Attiva la finestra associata alla chiave di scelta rapida specificata dall'applicazione. Il parametro lParam identifica la finestra da attivare.
SC_HSCROLL
0xF080
Scorre orizzontalmente.
SCF_ISSECURE
0x00000001
Indica se lo screen saver è sicuro.
SC_KEYMENU
0xF100
Recupera il menu della finestra come risultato di una sequenza di tasti. Per altre informazioni, vedere la sezione Osservazioni.
SC_MAXIMIZE
0xF030
Ottimizza la finestra.
SC_MINIMIZE
0xF020
Riduce a icona la finestra.
SC_MONITORPOWER
0xF170
Imposta lo stato della visualizzazione. Questo comando supporta i dispositivi con funzionalità di risparmio energia, ad esempio un personal computer con alimentazione a batteria.
Il parametro lParam può avere i valori seguenti:
  • -1 (la visualizzazione è attiva)
  • 1 (lo schermo sta andando a bassa potenza)
  • 2 (lo schermo è in fase di chiusura)
SC_MOUSEMENU
0xF090
Recupera il menu della finestra come risultato di un clic del mouse.
SC_MOVE
0xF010
Sposta la finestra.
SC_NEXTWINDOW
0xF040
Passa alla finestra successiva.
SC_PREVWINDOW
0xF050
Passa alla finestra precedente.
SC_RESTORE
0xF120
Ripristina la finestra alla sua normale posizione e dimensione.
SC_SCREENSAVE
0xF140
Esegue l'applicazione screen saver specificata nella sezione [boot] del file di System.ini.
SC_SIZE
0xF000
Ridimensiona la finestra.
SC_TASKLIST
0xF130
Attiva il menu Start .
SC_VSCROLL
0xF070
Scorre verticalmente.

lParam

La parola a basso ordine specifica la posizione orizzontale del cursore, nelle coordinate dello schermo, se viene scelto un comando di menu della finestra con il mouse. In caso contrario, questo parametro non viene usato.

La parola ad ordine elevato specifica la posizione verticale del cursore, nelle coordinate dello schermo, se viene scelto un comando di menu della finestra con il mouse. Questo parametro è 1 se il comando viene scelto usando un acceleratore di sistema o zero se si usa un mnemonic.

Valore restituito

Un'applicazione deve restituire zero se elabora questo messaggio.

Commenti

Per ottenere le coordinate di posizione nelle coordinate dello schermo, usare il codice seguente:

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

La funzione DefWindowProc esegue la richiesta di menu della finestra per le azioni predefinite specificate nella tabella precedente.

In WM_SYSCOMMAND messaggi, i quattro bit a basso ordine del parametro wParam vengono usati internamente dal sistema. Per ottenere il risultato corretto durante il test del valore di wParam, un'applicazione deve combinare il valore 0xFFF0 con il valore wParam usando l'operatore AND bit per bit.

È possibile modificare le voci di menu in un menu della finestra usando le funzioni GetSystemMenu, AppendMenu, InsertMenu, ModifyMenu, InsertMenuItem e SetMenuItemInfo. Le applicazioni che modificano il menu della finestra devono elaborare WM_SYSCOMMAND messaggi.

Un'applicazione può eseguire qualsiasi comando di sistema in qualsiasi momento passando un messaggio WM_SYSCOMMAND a DefWindowProc. Tutti i messaggi WM_SYSCOMMAND non gestiti dall'applicazione devono essere passati a DefWindowProc. Tutti i valori di comando aggiunti da un'applicazione devono essere elaborati dall'applicazione e non possono essere passati a DefWindowProc.

Se la protezione delle password è abilitata dai criteri, lo screen saver viene avviato indipendentemente dal funzionamento di un'applicazione con la notifica di SC_SCREENSAVE anche se non riesce a passarlo a DefWindowProc.

I tasti di scelta rapida definiti per scegliere gli elementi dal menu finestra vengono convertiti in messaggi WM_SYSCOMMAND ; tutte le altre sequenze di tasti di scelta rapida vengono tradotte in messaggi WM_COMMAND .

Se wParam è SC_KEYMENU, lParam contiene il codice carattere della chiave utilizzata con il tasto ALT per visualizzare il menu popup. Ad esempio, premendo ALT+F per visualizzare il popup File, verrà generato un WM_SYSCOMMAND con wParam uguale a SC_KEYMENU e lParam uguale a 'f'.

Requisiti

Requisito Valore
Client minimo supportato
Windows 2000 Professional [solo app desktop]
Server minimo supportato
Windows 2000 Server [solo app desktop]
Intestazione
Winuser.h (includere Windows.h)

Vedi anche

Riferimento

AppendMenu

DefWindowProc

GET_X_LPARAM

GET_Y_LPARAM

GetSystemMenu

InsertMenu

ModifyMenu

WM_COMMAND

Informazioni concettuali

Acceleratori di tastiera