Pregunta

¿Cómo puedo detectar cuando mi solicitud Compact Framework está siendo inteligente minimiza (smart minimizar es lo que sucede cuando el usuario hace clic en el botón "X" en la esquina superior derecha en un Pocket PC)?

El evento Desactivar no es la forma correcta, ya que se produce en circunstancias distintas de minimización, como cuando un cuadro de mensaje o de otra forma se muestra en la parte superior de la forma principal. Y WindowState del formulario no ayuda porque no hay WindowState "minimizado" en .NET CF.

He oído que mediante el establecimiento de MinimizeBox = falso, mi aplicación se cerrará en lugar de reducirse al mínimo. Pero en realidad no quiero que mi aplicación para cerrar, sólo quiero saber cuando se ha reducido al mínimo.

¿Fue útil?

Solución

Creo que el camino a seguir aquí está procesando la WM_ACTIVE mensaje y luego comprobar 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 aquí .

Voy a tratar de encontrar la manera de exactamente este código en C # y probar la hipótesis. Sin embargo, usted tal vez más rápido que yo y averiguarlo.

comprobar también las funciones DefWindowProc y WindowProc, que se utilizan para procesar los mensajes. Las funciones se declaran en su código como el siguiente:

En primer lugar tener el incluir:

using System.Runtime.InteropServices;

A continuación, en la clase de declarar 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 inteligente minimizar X es confuso para los usuarios, es por eso que no me gusta para incluirlo. En lugar de eso proporcionar un botón en la esquina inferior derecha de la forma que dice "cerrar" o "atrás", que utiliza el método de cierre de la forma. Lo utilicé en todas las formas de mantener un estándar. Esto es menos ambiguo para los usuarios de Windows, ya que pueden asumir que la X en Windows Mobile es el mismo en las ventanas X para PC.

Si por alguna razón es necesario para reducir al mínimo su aplicación o enviarla al fondo utilizar el código siguiente:

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);
    }
} 

Otros consejos

¿Qué quiere usted decir exactamente por smart-minimizada? -Supongo que se refiere a su aplicación se minimiza automáticamente en ninguna actividad durante algún tiempo? Bueno, no creo que hay un evento para eso.

El autor de este usos el blog punto Desactivar el evento para el torneado proceso interno encendido y apagado. Esto es aceptable para la animación y otros procesos similares, y los casos de un cuadro de mensaje u otra forma apareciendo hay problemas. Si sin embargo, su proceso no debe ser detenido a menos que la aplicación se cierra o minimiza 'inteligentes', podría intentar iniciar un temporizador de eventos Desactivar. Si el formulario no se activa de nuevo para un intervalo específico, entonces sería seguro para detener el proceso interno.

Por supuesto, en el diseño de su solución que necesita para tomar la administración de energía en consideración. Echar un vistazo a este y por supuesto también OpenNETCF para las notificaciones de energía.

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