2008-12-13 7 views
7

Comment détecter si mon application Compact Framework est réduite intelligemment (la réduction intelligente est ce qui se passe lorsque l'utilisateur clique sur le bouton "X" dans le coin supérieur droit de un Pocket PC)? L'événement Deactivate n'est pas le bon car il se produit dans des circonstances autres que la minimisation, par exemple lorsqu'une boîte de message ou un autre formulaire est affiché au-dessus du formulaire principal. Et WindowState du formulaire ne aide pas car il n'y a aucun WindowState "Minimized" sur .NET CF.Pocket PC/Windows Mobile: comment détecter une réduction intelligente

J'ai entendu dire qu'en définissant MinimizeBox = false, mon application sera fermée au lieu d'être réduite. Mais je ne veux pas que mon application se ferme, je veux juste savoir quand elle a été minimisée.

Répondre

5

Je pense que le chemin à parcourir ici est de traiter le message WM_ACTIVE puis de vérifier si le paramètre fMinimized n'est pas zéro. Vous pouvez trouver plus d'informations sur la façon de déclarer ces messages dans votre code au here.

Je vais essayer de comprendre comment coder exactement ceci en C# et prouver l'hypothèse. Cependant vous pouvez peut-être plus vite que moi et le comprendre.

Vérifiez également les fonctions DefWindowProc et WindowProc, qui sont utilisées pour traiter les messages. Les fonctions sont déclarées dans votre code comme ceci:

d'abord le comprennent:

using System.Runtime.InteropServices; 

puis dans la classe déclare comme ce

[DllImport("coredll.dll")] 
static extern IntPtr DefWindowProc(IntPtr hWnd, uint uMsg, UIntPtr wParam, 
    IntPtr lParam); 

Il y a une autre chose que vous pourriez faire, c'est plus une solution de contournement "philosophique". INMO la réduction intelligente X est source de confusion pour les utilisateurs, c'est pourquoi je n'aime pas l'inclure. Au lieu de cela, je fournis un bouton dans le coin inférieur droit du formulaire qui dit "close" ou "back", qui utilise la méthode close du formulaire. Je l'ai utilisé sous toutes ses formes pour garder une norme. Ceci est moins ambigu pour les utilisateurs de Windows, car ils peuvent supposer que le X dans Windows Mobile est le même X dans Windows pour PC.

Si pour une raison quelconque, vous devez réduire votre application ou l'envoyer à l'arrière-plan utiliser le code suivant:

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

Le ** Compact Framework ** ne donne pas accès à la méthode 'WindowProc' pour les' Form's normaux, alors comment puis-je utiliser ce conseil? Ou est-ce qu'il me manque quelque chose ici ... –

-1

Qu'entendez-vous exactement par smart-minimized? Je suppose que vous voulez dire que votre application est automatiquement réduite sur aucune activité pendant un certain temps? Eh bien, je ne pense pas qu'il y ait un événement pour ça.

L'auteur de cet blog spot utilise l'événement Désactiver pour activer et désactiver le processus interne. Ceci est acceptable pour l'animation et d'autres processus similaires et les cas d'une boîte de message ou d'un autre formulaire surgissent ne posent aucun problème. Toutefois, si votre processus ne doit pas être arrêté à moins que l'application ne se ferme ou ne soit "réduit intelligemment", vous pouvez essayer de démarrer un temporisateur sur les événements de désactivation. Si le formulaire n'est pas réactivé pour un intervalle spécifique, il est possible d'arrêter le processus interne en toute sécurité.

Bien sûr, dans la conception de votre solution, vous devez prendre en compte la gestion de l'alimentation. Jetez un oeil à this et bien sûr aussi OpenNetCF pour les notifications de puissance.

+0

intelligent minimiser est ce qui se passe lorsque l'utilisateur clique sur le bouton « X » dans le coin supérieur droit coin sur un Pocket PC.Un problème connexe est de savoir comment détecter la différence entre l'utilisateur démarrant un autre programme et une boîte de dialogue apparaissant qui appartient à mon application (tous deux produisent un événement Deactivate). – Qwertie

Questions connexes