Deplacer dessin [MFC] - C++ - Programmation
Marsh Posté le 17-02-2006 à 16:28:46
Quel est la nature de ton rectangle ? Dessiné ou contrôle d'IHM ?
Marsh Posté le 17-02-2006 à 17:06:39
Comment je procède :
- tu n'as aucun besoin de la zone bouton : tu captures les événements de la souris au niveau de la vue de dessin.
- à priori j'opterai pour un CView
- tu gères un attribut de type CRect pour conserver la position du rectangle (voir comment initialiser sa position)
- tu gères un indicateur pour le drag & drop et tu adaptes les gestionnaires de messages de la souris en conséquence.
- procédé classique :
-> sur WM_LBUTTONDOWN: tu testes si le curseur est dans le rectange, si c'est le cas tu positionnes l'indicateur de drag.
-> Sur WM_MOUSEMOVE: tu "déplaces" le rectangle si le flag de drag est positionné sinon tu fais rien (ou une autre action que tu as définit). Une méthode simple pour déplacer l'objet à l'écran : dessiner un rectangle de focus (attention deux phases) - nécessite de mémoriser la nouvelle position à chaque fois (en mettant à jour la position du rectangle par exemple, mais cela ne permet plus d'annuler le déplacement).
-> Sur WM_LBUTTONUP :
- si l'indicateur de drag est positionné, tu modifies la position du rectangle, tu met à zéro le flag de drag et tu redessines la vue.
- sinon tu ne fais rien (ou comportement spécifique)
- le OnDraw de la vue se contente de dessiner le rectangle à sa position.
Marsh Posté le 17-02-2006 à 17:45:35
Hum alors ca c'etait mon idée de base, mais voila pourquoi je n'es pas opté pour elle :
Ma fenetre ou j'ai besoin de dessiner n'est pas ma fenetre mere, c'est une boite de dialog, ouverte grace à 2 menus consecutifs.
Donc j'ai du opter pour une ondrawitem sur bouton.
Donc dans ce cas les evenements que tu definis ne marchent pas. On m'a dit d'utiliser SetWindowPos pour deplacer tt ca mais bon c'est assez leger :S
Marsh Posté le 17-02-2006 à 17:49:42
Que ce soit une boîte de dialogue (un CDialog infine donc ?) ou un CView de toute façon les deux héritent de CWnd qui permet de capturer les événements souris.
Marsh Posté le 17-02-2006 à 17:50:56
Par contre perso je te conseille un CStatic (hérite encore de CWnd) à fond blanc surchargé de la manière adhoc et inséré dans le dialogue.
Marsh Posté le 17-02-2006 à 17:55:32
Eh bien, les evenements souris marchent trés bien hors bouton, mais à partir du moment ou on essai sur un bouton sa ne marche pas ( normal ).
Le probléme c'est que j'ai bien avancé dans ce projet et je garde finalement cette méthode, mais c'est possible de deplacer une figure dans ce type bouton ?
Marsh Posté le 17-02-2006 à 18:08:00
Si tu surcharges un CButton et que tu captures les événements dans cette classe ça devrait fonctionner mais je trouve cela très peu cohérent (et cela va probablement parasiter le comportement normal du bouton).
Marsh Posté le 17-02-2006 à 23:33:28
j'ai fait un attrape con en MFC y'a longtemps, à l'époque ou j'avais rien à foutre, ça peut peut-être servir
exe : http://harko.free.fr/euro.exe
source : http://harko.free.fr/euro.rar
Marsh Posté le 17-02-2006 à 23:57:04
Marrant. Y a juste un défaut : de temps en temps le bouton déborde de la zone visible.
Marsh Posté le 18-02-2006 à 12:45:01
merci :-)
PS: j'ai maté le code, c'est pas du tout ce dont j'ai besoin . En faite, j'ai un dessin dans un bouton ( qui me sert de zone de dessin quoi) et je veux deplacer un ce dessin comme ou je veux dans ce bouton)
PS2 : C'est de ma faute, je t'ai induit en erreur avec le setwindowpos, ca c'est pour deplacer mon controle, or moi je veux deplacer ce qui est dans ce controle.
Marsh Posté le 17-02-2006 à 14:19:27
Salut à tous
Une petite question, j'aimerais deplacer un objet ( un rectangle par exemple) dans une zone (zone bouton, j'utilise, un ondrawitem) c est à dire une fois qu'il est creér, comment faire pour le deplacer ou je veux dans dans moin bouton ??
merci