mensaje de WM_SYSCOMMAND

Una ventana recibe este mensaje cuando el usuario elige un comando en el menú Ventana (anteriormente conocido como el menú del sistema o control) o cuando el usuario elige el botón maximizar, minimizar el botón, restaurar botón o cerrar.

#define WM_SYSCOMMAND                   0x0112

Ejemplo

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

Ejemplo tomado del directorio Windows Classic Samples de GitHub.

Parámetros

wParam

Tipo de comando del sistema solicitado. Este parámetro puede ser uno de los valores siguientes.

Valor Significado
SC_CLOSE
0xF060
Cierra la ventana.
SC_CONTEXTHELP
0xF180
Cambia el cursor a un signo de interrogación con un puntero. Si el usuario hace clic en un control en el cuadro de diálogo, el control recibe un mensaje de WM_HELP .
SC_DEFAULT
0xF160
Selecciona el elemento predeterminado; el usuario hace doble clic en el menú de la ventana.
SC_HOTKEY
0xF150
Activa la ventana asociada a la clave activa especificada por la aplicación. El parámetro lParam identifica la ventana que se va a activar.
SC_HSCROLL
0xF080
Se desplaza horizontalmente.
SCF_ISSECURE
0x00000001
Indica si el protector de pantalla es seguro.
SC_KEYMENU
0xF100
Recupera el menú de la ventana como resultado de una pulsación de tecla. Para obtener más información, vea la sección Comentarios.
SC_MAXIMIZE
0xF030
Maximiza la ventana.
SC_MINIMIZE
0xF020
Minimiza la ventana.
SC_MONITORPOWER
0xF170
Establece el estado de la pantalla. Este comando admite dispositivos que tienen características de ahorro de energía, como un equipo personal con batería.
El parámetro lParam puede tener los siguientes valores:
  • -1 (la pantalla está encendido)
  • 1 (la pantalla va a baja potencia)
  • 2 (la pantalla se está apagando)
SC_MOUSEMENU
0xF090
Recupera el menú de la ventana como resultado de un clic del mouse.
SC_MOVE
0xF010
Mueve la ventana.
SC_NEXTWINDOW
0xF040
Se mueve a la ventana siguiente.
SC_PREVWINDOW
0xF050
Se mueve a la ventana anterior.
SC_RESTORE
0xF120
Restaura la ventana a su posición y tamaño normales.
SC_SCREENSAVE
0xF140
Ejecuta la aplicación de protector de pantalla especificada en la sección [boot] del archivo System.ini.
SC_SIZE
0xF000
Cambia el tamaño de la ventana.
SC_TASKLIST
0xF130
Activa el menú Inicio .
SC_VSCROLL
0xF070
Se desplaza verticalmente.

lParam

La palabra de orden bajo especifica la posición horizontal del cursor, en coordenadas de pantalla, si se elige un comando de menú de ventana con el mouse. De lo contrario, este parámetro no se usa.

La palabra de orden superior especifica la posición vertical del cursor, en coordenadas de pantalla, si se elige un comando de menú de ventana con el mouse. Este parámetro es 1 si se elige el comando mediante un acelerador del sistema o cero si se usa una mnemonic.

Valor devuelto

Una aplicación debe devolver cero si procesa este mensaje.

Comentarios

Para obtener las coordenadas de posición en coordenadas de pantalla, use el código siguiente:

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

La función DefWindowProc lleva a cabo la solicitud de menú de la ventana para las acciones predefinidas especificadas en la tabla anterior.

En WM_SYSCOMMAND mensajes, el sistema usa internamente los cuatro bits de orden bajo del parámetro wParam . Para obtener el resultado correcto al probar el valor de wParam, una aplicación debe combinar el valor 0xFFF0 con el valor wParam mediante el operador AND bit a bit.

Los elementos de menú de un menú de ventana se pueden modificar mediante las funciones GetSystemMenu, AppendMenu, InsertMenu, ModifyMenu, InsertMenuItem y SetMenuItemInfo . Las aplicaciones que modifican el menú de la ventana deben procesar WM_SYSCOMMAND mensajes.

Una aplicación puede llevar a cabo cualquier comando del sistema en cualquier momento pasando un mensaje de WM_SYSCOMMAND a DefWindowProc. Todos los mensajes WM_SYSCOMMAND no administrados por la aplicación deben pasarse a DefWindowProc. La aplicación debe procesar los valores de comando agregados por una aplicación y no se puede pasar a DefWindowProc.

Si la directiva habilita la protección con contraseña, el protector de pantalla se inicia independientemente de lo que hace una aplicación con la notificación de SC_SCREENSAVE incluso si no se puede pasar a DefWindowProc.

Las teclas de aceleración definidas para elegir elementos del menú de la ventana se traducen en mensajes WM_SYSCOMMAND ; todas las demás pulsaciones de tecla de aceleración se traducen en mensajes de WM_COMMAND .

Si wParam es SC_KEYMENU, lParam contiene el código de carácter de la clave que se usa con la tecla ALT para mostrar el menú emergente. Por ejemplo, al presionar ALT+F para mostrar el elemento emergente Archivo, se producirá un WM_SYSCOMMAND con wParam igual a SC_KEYMENU y lParam igual a "f".

Requisitos

Requisito Value
Cliente mínimo compatible
Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible
Windows 2000 Server [solo aplicaciones de escritorio]
Encabezado
Winuser.h (incluye Windows.h)

Consulte también

Referencia

AppendMenu

DefWindowProc

GET_X_LPARAM

GET_Y_LPARAM

GetSystemMenu

InsertMenu

ModifyMenu

WM_COMMAND

Conceptual

Aceleradores de teclado