IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

évenement Clic en GDI


Sujet :

C#

  1. #1
    Membre régulier

    Inscrit en
    Février 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 106
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut évenement Clic en GDI
    Bonjour,

    j'aimerai créer un petit jeux 2D en c# + GDI+ et on faisons les testes préliminaires j'ai été confronté à un problème d’événement clic que je n'arrive pas à mettre a mes composants graphiques à savoir une bitmap/rectangles ...
    après avoir vérifié sur google, j'ai compris qu'il faut faire ça manuellement .
    j'ai aussi compris que pour réaliser cela il faut passer par 3 choses:
    1-détecter le clic de la souris a l'intérieur de l'objets
    2-vérifier la où la souris à cliqué correspond à une pixel coloré est non transparente de l'objet.
    3-en cas de superposition de plusieurs objets l'un sur l'autre, seul l'objet visible (celui qui est sur le devant) qui dois être concerné par le clic.

    pour la 1ere conclusion, j'ai ajouté l'événement MouseClick à la Form comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    private void Form1_MouseClick(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Left)
                {
                    if(rectangle.Contains(e.Location))
                    {
                        MessageBox.Show("cliqué avec le boutton gauche");
                    }
                }
                else if (e.Button == MouseButtons.Right)
                {
                    if(rectangle.Contains(e.Location))
                    {
                        MessageBox.Show("cliqué avec le bouton droit");
                    }
                }
            }
    bon cela marche pour le rectangle grâce à la méthode Contains mais j'aimerai faire autant pour l'objet bitmap pour dessiner des images mais la méthode Contains n'est pas accessible pour l'objet Bitmap.

    ma question est donc, comment détecter le clic sur l'objet Bitmap svp.
    et pour les autres étapes je vois vraiment pas comment faire

    une autre question pour quelqu'un qui a expérimenter les graphismes sous gdi, est se que le faite de faire un jeu style RPG en gdi ne ralentira pas mon application en sachons qu'il aura plusieurs bitmap a dessiner + map ...

    Merci beaucoup

  2. #2
    Membre régulier

    Inscrit en
    Février 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 106
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut
    Bonsoir,
    bon j'ai trouvé une alternative pour détecter le clic sur le bitmap, c'est en créant un rectangle qui a les même proportion de l'image ainsi utiliser la méthode Contains pour vérifier comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    private void Form1_MouseClick(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Left)
                {
                    if (new Rectangle(cnt, 100, bmp.Width, bmp.Height).Contains(e.Location))
                    {
                            MessageBox.Show("Cliqué avec le boutton droit sur l'image");
                    }
                }
            }
    mais je ne trouve toujours pas comment je peux vérifier là où la souris a cliqué est une pixel visible est non transparente. (étape 2)
    cnt étant un variable qui s'incrémente pour faire bouger mon image horizontalement, et 100 est une valeur fixe verticale de l'image

  3. #3
    Membre régulier

    Inscrit en
    Février 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 106
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    voila je pense que j'ai trouvé comment contourner ceci,
    en effet c'est été tout bêtement simple, question de logique
    si on suppose que j'ai mis une Bitmap a la position (X=100, Y=100)
    donc la où le curseur de la souris à pointé à l'intérieure de l'image dois être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bmp.GetPixel(e.X - 100, e.Y - 100);
    la on soustrait la position de l'image de la position du curseur

    chose résolue, j'espère que ca va aider au moins quelqu'un

    *pour l'étape 3, rien de plus facile que d'ajouter une List<Bitmap> qui contiens tout mes graphics et faire la vérification par ordre decroissant (le dernier affiché vers celui qui est le plus bas affiché)


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Affichage d'un Jlist suite à un évenement clic sur bouton
    Par insarouen dans le forum Composants
    Réponses: 1
    Dernier message: 15/04/2011, 19h25
  2. Utilisation de l'évenement double clic sur une cellule
    Par moilou2 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 01/07/2008, 14h57
  3. Réponses: 7
    Dernier message: 18/04/2007, 18h31
  4. évenements générés par un CR ou par un clic
    Par metallien dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/02/2006, 09h07
  5. [html] évenements générés par un CR ou par un clic
    Par metallien dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 05/02/2006, 11h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo