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++?

¿Fue útil?

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.

wm_size

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top