2008-12-13 5 views
7

¿Cómo puedo detectar cuándo se está minimizando inteligentemente mi aplicación Compact Framework? (Minimizar inteligente es lo que sucede cuando el usuario hace clic en el botón "X" en la esquina superior derecha una PC de bolsillo)?Pocket PC/Windows Mobile: cómo detectar minimizar inteligente

El evento Deactivate no es el correcto porque se produce en circunstancias distintas a la minimización, como cuando se muestra un cuadro de mensaje u otro formulario en la parte superior del formulario principal. Y WindowState del formulario no ayuda porque no hay WindowState "Minimizado" en .NET CF.

Escuché que estableciendo MinimizeBox = falso, mi aplicación se cerrará en lugar de minimizarse. Pero en realidad no quiero que se cierre mi aplicación, solo quiero saber cuándo se ha minimizado.

Respuesta

5

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

** 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í ... –

-1

¿Qué quieres decir con smart-minimized? Supongo que te refieres a que tu aplicación se minimiza automáticamente sin actividad alguna durante un tiempo. Bueno, no creo que haya un evento para eso.

El autor de este blog spot utiliza el evento Desactivar para activar y desactivar el proceso interno. Esto es aceptable para animación y otros procesos similares y los casos de un cuadro de mensaje u otro formulario que aparece no son ningún problema. Sin embargo, si su proceso no debe detenerse a menos que la aplicación cierre o 'minimice inteligentemente', podría intentar iniciar un temporizador para desactivar eventos. Si el formulario no se activa de nuevo durante un intervalo específico, entonces sería seguro detener el proceso interno.

Por supuesto, al diseñar su solución debe tener en cuenta la administración de energía. Eche un vistazo a this y, por supuesto, también a OpenNetCF para notificaciones de energía.

+0

inteligente minimizar es lo que sucede cuando el usuario hace clic en el botón "X" en la parte superior derecha esquina en una PC de bolsillo.Un problema relacionado es cómo detectar la diferencia entre el usuario que inicia otro programa y un cuadro emergente de diálogo que pertenece a mi aplicación (ambos generan un evento Deactivate). – Qwertie

Cuestiones relacionadas