none
intercepter le close sur la coix rouge le diférencier avec un bouton de fermeture RRS feed

  • Question

  • Bonsoir a tous et merci d’avance

    sur une form1 ou 2 peut import

    j'ai besoin de savoir s'y l'utilisateur a cliquer sur le bouton prévus ou s'il clic sur la croix

    apparemment il passe tout les deux par close() ou Closing()

    merci

    lundi 27 juillet 2020 18:27

Réponses

  • Une méthode pour détecter la croix =>

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        int nX = System.Windows.Forms.Cursor.Position.X;
        int nY = System.Windows.Forms.Cursor.Position.Y;
        if (SendMessage(this.Handle, WM_NCHITTEST, 0, (IntPtr)MakeLong((short)nX, (short)nY)) == HTCLOSE)
        {
            Console.Beep(6000, 10);
        }
    }

    Declarations :

    public int MakeLong(short lowPart, short highPart)
    {
        return (int)(((ushort)lowPart) | (uint)(highPart << 16));
    }
    
    [DllImport("User32.dll", SetLastError = true, CharSet = CharSet.Auto)]
    public static extern int SendMessage(IntPtr hWnd, uint msg, int wParam, IntPtr lParam);
    
    public const int WM_NCHITTEST = 0x0084;
    public const int HTCLOSE = 20;

    • Marqué comme réponse Orleandeux mardi 28 juillet 2020 07:36
    lundi 27 juillet 2020 20:34

Toutes les réponses

  • Une méthode pour détecter la croix =>

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        int nX = System.Windows.Forms.Cursor.Position.X;
        int nY = System.Windows.Forms.Cursor.Position.Y;
        if (SendMessage(this.Handle, WM_NCHITTEST, 0, (IntPtr)MakeLong((short)nX, (short)nY)) == HTCLOSE)
        {
            Console.Beep(6000, 10);
        }
    }

    Declarations :

    public int MakeLong(short lowPart, short highPart)
    {
        return (int)(((ushort)lowPart) | (uint)(highPart << 16));
    }
    
    [DllImport("User32.dll", SetLastError = true, CharSet = CharSet.Auto)]
    public static extern int SendMessage(IntPtr hWnd, uint msg, int wParam, IntPtr lParam);
    
    public const int WM_NCHITTEST = 0x0084;
    public const int HTCLOSE = 20;

    • Marqué comme réponse Orleandeux mardi 28 juillet 2020 07:36
    lundi 27 juillet 2020 20:34
  • ho castorix toujours a l'appel

    merci a toi

    mardi 28 juillet 2020 07:36
  • je suis en Basic pas en C je me débouille merci
    mardi 28 juillet 2020 07:41