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