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 |
|
Consulte también
-
Referencia
-
Conceptual