La "Class level"

Résolu/Fermé
TheMinecraftSteve Messages postés 67 Date d'inscription mardi 16 février 2021 Statut Membre Dernière intervention 6 juin 2022 - Modifié le 30 juil. 2021 à 11:13
yg_be Messages postés 22726 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 - 28 oct. 2021 à 20:05
Bonjour,

Je programme de plus en plus (et je découvre de plus en plus) en C#. En C#, on peut faire des bouton custom pour fermer, maximize, minimize la form. Ce n'est pas là mon problème mais vu que je dois mettre le FormBorderStyle en None, je ne peux pas faire bouger la Form. J'ai trouvé un forum (sur Stack OverFlow) de comment faire des boutons personnalisés en C#. J'ai tout compris et un moment la personne elle dit "Finally, make the form draggable with our panel. Add those at the class level:
public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HTCAPTION = 0x2;
[DllImport("User32.dll")]
public static extern bool ReleaseCapture();
[DllImport("User32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

soit disant "Enfin, rendez le formulaire glissant avec notre panneau. Ajoutez-les au niveau de la classe :". Mais je ne trouve pas de class. Je sais qu'il faut la class view mais je ne comprend pas comment ça fonctionne. J'ai tellement envie de pouvoir faire tout ça. Aussi après, "and plug them in a MouseDown event of the panel:"
private void OnMouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        ReleaseCapture();
        SendMessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
    }
}
soit disant "et les brancher dans un événement MouseDown du panneau :". Je ne sais pas où ça se trouve non plus. Et aussi pour ça: And now you have a draggable form, with your own bar at the top.

If you want it to be resizable, as @PhilWright mentionned, you can trap the
WM_NCHITTEST
message from
WndProc
and return
HTBOTTOMRIGHT
to trigger the resizing :

protected override void WndProc(ref Message m)
{
    if (m.Msg == 0x84)
    { 
        const int resizeArea = 10;
        Point cursorPosition = PointToClient(new Point(m.LParam.ToInt32() & 0xffff, m.LParam.ToInt32() >> 16));
        if (cursorPosition.X >= ClientSize.Width - resizeArea && cursorPosition.Y >= ClientSize.Height - resizeArea )
        {
            m.Result = (IntPtr)17;
            return;
        }
    }

    base.WndProc(ref m);
}
soit disant (en français): "Et maintenant vous avez un formulaire glissant, avec votre propre barre en haut.

Si vous voulez qu'elle soit redimensionnable, comme @PhilWright l'a mentionné, vous pouvez piéger le message
WM_NCHITTEST
de
WndProc
et retourner
HTBOTTOMRIGHT
pour déclencher le redimensionnement :"


4 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
30 juil. 2021 à 14:08
Bonjour

Un lien vers la discussion de stackoverflow ça serait bien pour comprendre de quoi il retourne.
J’ai l’impression qu’il faut dériver un formulaire pour ces codes, mais bon, je ne fais plus de winform depuis un moment maintenant alors pas sûr.
0
TheMinecraftSteve Messages postés 67 Date d'inscription mardi 16 février 2021 Statut Membre Dernière intervention 6 juin 2022 1
30 juil. 2021 à 18:28
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
31 juil. 2021 à 00:45
Ok, donc au temps pour moi, il semble qu’on ait accès a WmdProc sans dériver.

Quand tu dis avoir tout compris et quelques lignes plus loin que tu ne trouves pas de class, c’est qu’en fait tu n’as pas compris le tuto parce que tu n’as pas compris C#.

J’ai l’impression que tu fais l’erreur de quasiment tous les autodidactes (moi aussi en mon temps) => te lancer dans ton projet comme ça.

Avoir un projet c’est super, mais négliger d’apprendre les bases ça conduit inévitablement à des impasses.

Je meilleur conseil que je puisse te donner c’est de mettre ton projet de côté quelques jours le temps de suivre un cours en ligne. Celui de Tahé par exemple https://tahe.developpez.com/dotnet/csharp/

A l’issue tu devrais être capable de vraiment comprendre ce tuto et de trouver la classe.

Et j’espère que tu comprendras qu’un forum n’est pas la pour instruire, c’est le rôle d’un cours, un forum sert à un coup de main ponctuel et ce n’est pas ce don tu as réellement besoin.
0
TheMinecraftSteve Messages postés 67 Date d'inscription mardi 16 février 2021 Statut Membre Dernière intervention 6 juin 2022 1
31 juil. 2021 à 11:52
Ok. Merci
0
TheMinecraftSteve Messages postés 67 Date d'inscription mardi 16 février 2021 Statut Membre Dernière intervention 6 juin 2022 1
Modifié le 8 août 2021 à 19:58
Bonjour,
j'arrête Comment ça marche. Merci pour votre aide. Pourquoi? Parce que j'ai trouvé des choses sur Internet et ça m'aide beaucoup pour être honnête. Vraiment, MERCI!! A dieu!
(Je ne reviendrais pas). :)
C’était cool d'être ici mais je ne pouvais pas rester.

0
yg_be Messages postés 22726 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 476
28 oct. 2021 à 20:05
Au revoir.
Peux-tu alors marquer la discussion comme résolue?
0