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

MFC Discussion :

[MFC] ligne cliquable


Sujet :

MFC

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 104
    Par défaut [MFC] ligne cliquable
    Bonjour,

    Toujours dans le cadre de mon application (MFC AppWizard) qui devra permettre de créer un modèle avec des objets (CBitmapButton) reliés entre eux, je voudrais savoir comment faire simplement des lignes cliquables :

    J'ai déjà développé une classe qui lors du rafraichissement exécute le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    		pDC->MoveTo(dep->coordForRoute);
    		pDC->LineTo(arr->coordForRoute);
    Ca trace la ligne et la fait suivre l'objet si il est déplacé (car dep->coordForRoute et arr->coordForRoute s'actualisent à ce moment là).

    Maintenant mon pb c'est que j'aimerais que l'utilisateur puisse cliquer ou double-cliquer dessus pour pouvoir lancer un dialog de paramètre, pouvoir supprimer cette route... Comme pour mes CBitmapButton des objets...
    Mais je pense qu'il faut utiliser autre chose pour que le clique se fasse que sur la ligne et puisque ce n'est pas une image dans ce cas...

    J'ai regardé l'exemple DRAWCLI des samples MFC qui fait ce que je veux mais j'y comprend rien et je veux pas d'une architecture aussi complexe.

    Qqn a une idée ?

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut Re: [MFC] ligne cliquable
    Citation Envoyé par pi05
    Bonjour,

    Toujours dans le cadre de mon application (MFC AppWizard) qui devra permettre de créer un modèle avec des objets (CBitmapButton) reliés entre eux, je voudrais savoir comment faire simplement des lignes cliquables :

    J'ai déjà développé une classe qui lors du rafraichissement exécute le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    		pDC->MoveTo(dep->coordForRoute);
    		pDC->LineTo(arr->coordForRoute);
    Ca trace la ligne et la fait suivre l'objet si il est déplacé (car dep->coordForRoute et arr->coordForRoute s'actualisent à ce moment là).

    Maintenant mon pb c'est que j'aimerais que l'utilisateur puisse cliquer ou double-cliquer dessus pour pouvoir lancer un dialog de paramètre, pouvoir supprimer cette route... Comme pour mes CBitmapButton des objets...
    Mais je pense qu'il faut utiliser autre chose pour que le clique se fasse que sur la ligne et puisque ce n'est pas une image dans ce cas...

    J'ai regardé l'exemple DRAWCLI des samples MFC qui fait ce que je veux mais j'y comprend rien et je veux pas d'une architecture aussi complexe.

    Qqn a une idée ?
    salut ,c'est pas tres clair pour moi.
    si tu veux lancer une dialogue sur un click ou double click ,
    intercepte le message correspondant sur le click ou double click sur le bitmap bouton avec classwizard .

  3. #3
    tut
    tut est déconnecté
    Membre éclairé
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Par défaut
    ...et récupère à ce moment-là les coordonnées du clic pour savoir si l'utilisateur a cliqué sur une ligne ou pas.
    Ca suppose par contre que :
    - tu aies une structure de données qui mémorise l'ensemble de tes lignes dessinées;
    - tu fasses un peu de calcul pour savoir si le point appartient à la ligne (maths niveau 3ème)
    - peut-être prévoir une tolérance pour le clic de la ligne, il n'est pas toujours évident de cliquer sur une ligne de un pixel de large....

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 104
    Par défaut
    selon vos dires, il serait possible que la ligne soit la diagonale d'un CBitmapButton qui n'aurait donc pas d'image (juste la ligne, qui n'est pas une image) mais sur lequel ou pourrai quand meme cliquer ? Quelles sont les options correspondantes lors du create ?

    J'ai essayé sans faire de LoadBitmaps mais les clics ne sont pas pris en compte...

  5. #5
    tut
    tut est déconnecté
    Membre éclairé
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Par défaut
    ouh la ouh la ! tu extrapoles vite !
    c'est pas si simple...
    ta ligne, tu la dessines bien sur un composant ? eh bien, c'est sur ce composant-là qu'il faut que tu récupères les évènements de clic de souris et faire ensuite toute la touille pour savoir si l'utilisateur a cliqué sur une ligne ou pas.

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 104
    Par défaut
    tous le problème est dans le composant.

    Ma ligne je la dessine juste sur le CDC* de ma view...
    J'ai encapsulé les fonctions et quelques variables dans une classe dont je ne sais pas de quoi elle doit hériter. Si je lui fait hériter d'un CBitmapButton, qui gère très bien tous ces évènements souris, il faudra bien lui mettre une image puisque sans appeler LoadBitmap le composant n'est pas cliquable... Un CButton c'est pareil soit il est pas visible mais pas cliquable non plus soit il est visible et j'ai un gros bouton tout gris par dessus ma ligne !!

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 104
    Par défaut
    Et voila j'ai trouvé !!

    En fait je fait hériter ma classe de routes de CWnd, comme ça ça gère le clic et cie, il suffisait de faire un ShowWindow(SW_SHOW) pour que ça marche !!

    Merci qd meme à tut et farscape !

  8. #8
    tut
    tut est déconnecté
    Membre éclairé
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Par défaut
    bien vu.

  9. #9
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 104
    Par défaut
    Euuu en fait c'est pas trop la panacée mon idée...

    Une CWnd c'est rectangulaire, et qd les lignes se croisent alors !!

    Non il faudrait vraiment un objet qui ai la forme d'une ligne et qui soit cliquable (donc un peu large qd même qu'on puisse cliquer avec une tolérance)... Mais quoi ???

  10. #10
    mat.M
    Invité(e)
    Par défaut
    J'ai regardé l'exemple DRAWCLI des samples MFC qui fait ce que je veux mais j'y comprend rien et je veux pas d'une architecture aussi complexe.
    Impossible de passer outre ; on ne peut pas faire plus simple les MFC sont réellement complexes

    Pour répondre au problème je donnerais 3 solutions :
    inscrire la ligne dans un rectangle de coordonnées haut , gauche qui est une des extrémités et l'autre les coordonnées bas, droite du rectangle.
    Utiliser PTInRect de CDC

    utiliser l'algorithme de Bresenham : il permet de tracer une ligne d'un point vers un autre .
    Si le point qui représente le clic souris appartient à cet ensemble de points alors on a cliqué sur la ligne

    sinon créer une région polygonale de -5 à +5 pixels de parts et d'autres de la ligne avec CRgn et utiliser PtInRgn pour savoir si on a cliqué dedans

  11. #11
    Membre chevronné
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Par défaut
    Je sais pas si ça peut t'aider mais regarde ce post :
    http://www.developpez.net/forums/viewtopic.php?t=314545

  12. #12
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par pi05
    Et voila j'ai trouvé !!

    En fait je fait hériter ma classe de routes de CWnd, comme ça ça gère le clic et cie, il suffisait de faire un ShowWindow(SW_SHOW) pour que ça marche !!

    Merci qd meme à tut et farscape !
    CWnd n'a rien avoir làdedans c'est une classe de fenêtre pas de tracé graphique !

  13. #13
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 104
    Par défaut
    Et voila j'ai me solution qui marche nickel !!

    J'ai fait une CRgn par route qui s'actualise à chaque fois que la route change de place (CreatePolyRgn à chaque fois, sans oublier le Detach juste avant). C'est un polygone à 4 points qui entoure la route avec une certaine tolérance avec tolérance sur les y si la ligne est plutot horizontale et sur les x sinon.

    Et donc le double clic sur la view parcours le tableau de route pour voir si le point double cliqué correspond à une des régions.

    Cette solution est vraiment satisfaisante, merci particulièrement à mat.M et mattazz pour leur bonnes idées sans lesquels j'y serait surement pas arrivé !

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

Discussions similaires

  1. [MFC] ligne disjointe FlexGrid
    Par moulefrite dans le forum MFC
    Réponses: 3
    Dernier message: 21/04/2006, 10h04
  2. [MFC] ligne combobox
    Par moulefrite dans le forum MFC
    Réponses: 3
    Dernier message: 12/04/2006, 11h37
  3. [MFC] Ligne selectionné MSFlexGrid
    Par moulefrite dans le forum MFC
    Réponses: 1
    Dernier message: 11/04/2006, 17h05
  4. [MFC][IHM] lignes "cliquables"
    Par r0d dans le forum MFC
    Réponses: 12
    Dernier message: 24/03/2005, 15h13
  5. dessiner des lignes "cliquables"
    Par r0d dans le forum Webdesign & Ergonomie
    Réponses: 14
    Dernier message: 21/03/2005, 15h02

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