¿Cómo puedo detectar cuando mi aplicación está minimizada?
-
12-11-2019 - |
Pregunta
Tengo un programa con una opción para permitir la minimización del área de notificación de la barra de tareas.Para que esto funcione, necesito una forma confiable de detectar cuándo el usuario ha minimizado la aplicación.
¿Cómo puedo hacerlo usando la API de Windows en una aplicación C++?
Solución
Cuando el usuario minimiza la ventana (ya sea usando el cuadro en la barra de título o seleccionando la opción "Minimizar" en el menú del sistema), su aplicación recibirá un WM_SYSCOMMAND
mensaje.El wParam
El parámetro de ese mensaje contendrá el valor. SC_MINIMIZE
, que indica el tipo particular de comando del sistema que se solicita.En este caso, no te importa el lParam
.
Por lo tanto, necesita configurar un mapa de mensajes que escuche un WM_SYSCOMMAND
mensaje con el wParam
ajustado a SC_MINIMIZE
.Al recibir dicho mensaje, debe ejecutar su código para minimizar su aplicación en el área de notificación de la barra de tareas y devolver 0 (lo que indica que ha procesado el mensaje).
No estoy seguro de qué marco GUI estás usando.El código de muestra podría tener un aspecto muy diferente para distintos kits de herramientas.Esto es lo que podría usar en una aplicación Win32 C directa:
switch (message)
{
case WM_SYSCOMMAND:
if ((wParam & 0xFFF0) == SC_MINIMIZE)
{
// shrink the application to the notification area
// ...
return 0;
}
break;
}
Otros consejos
Creo que estás buscando wm_size.Cuando obtiene esto, marque el WPPARAM para obtener los detalles.Aquí está la página de MSDN.
Puede verificar el tamaño del área devuelto de GetClientRect: si está cero, está minimizado, funciona para mí, pero puede que no funcione en todos los casos.