.net - Pocket PC/Windows Mobile: cómo detectar inteligente minimizar
windows-mobile compact-framework (2)
¿Qué quieres decir con "minimizado inteligente"? 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 utiliza el evento Deactivate 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. Echa un vistazo a esto y, por supuesto, también a OpenNetCF para notificaciones de energía.
¿Cómo puedo detectar cuándo se está minimizando de forma inteligente mi aplicación Compact Framework (lo que ocurre cuando el usuario hace clic en el botón "X" en la esquina superior derecha de una Pocket PC)?
El evento Deactivate no es el correcto porque ocurre 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 = false, 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.
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 aquí .
Intentaré descubrir cómo codificar esto exactamente 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 de esta manera:
Primero tiene el incluir:
using System.Runtime.InteropServices;
luego en la clase declara así
[DllImport("coredll.dll")]
static extern IntPtr DefWindowProc(IntPtr hWnd, uint uMsg, UIntPtr wParam,
IntPtr lParam);
Hay otra cosa que podrías 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 necesita minimizar su aplicación o enviarla a segundo plano, use 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);
}
}