Creo que el camino a seguir aquí es procesar el mensaje WM_ACTIVE y luego verificar si el parámetro fMinimized no es cero. Puede encontrar más información sobre cómo declarar estos mensajes en su código en here.
Intentaré averiguar cómo codificar exactamente esto en C# y probar la hipótesis. Sin embargo, quizás sea más rápido que yo y lo resuelva.
También verifique las funciones DefWindowProc y WindowProc, que se utilizan para procesar los mensajes. Las funciones se declaran en su código como este:
En primer lugar tienen la incluyen:
using System.Runtime.InteropServices;
continuación, en la clase declaran como esto
[DllImport("coredll.dll")]
static extern IntPtr DefWindowProc(IntPtr hWnd, uint uMsg, UIntPtr wParam,
IntPtr lParam);
Hay otra cosa que podría hacer, esto es más una solución "filosófica". INMO el minimizar inteligente X es confuso para los usuarios, es por eso que no me gusta incluirlo. En su lugar, proporciono un botón en la esquina inferior derecha del formulario que dice "cerrar" o "volver", que utiliza el método de cierre del formulario. Lo usé en todas las formas para mantener un estándar. Esto es menos ambiguo para los usuarios de Windows porque pueden suponer que la X en Windows Mobile es la misma X en Windows para PC.
Si por alguna razón es necesario para reducir al mínimo su aplicación o enviarla al fondo utilice el siguiente código:
using System.Runtime.InteropServices;
...
public partial class Main : Form
{
public Main()
{
InitializeComponent();
}
[DllImport("coredll.dll")]
static extern int ShowWindow(IntPtr hWnd, int nCmdShow);
const int SW_MINIMIZED = 6;
...
...
public void HideForm()
{
ShowWindow(this.Handle, SW_MINIMIZED);
}
}
** Compact Framework ** no da acceso al método 'WindowProc' para' Form's normales, entonces, ¿cómo puedo hacer uso de este consejo? O me estoy perdiendo algo aquí ... –