[MFC]Deplacer dessin

Deplacer dessin [MFC] - C++ - Programmation

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

Reply

Marsh Posté le 17-02-2006 à 14:19:27   

Reply

Marsh Posté le 17-02-2006 à 16:28:46    

Quel est la nature de ton rectangle ? Dessiné ou contrôle d'IHM ?

Reply

Marsh Posté le 17-02-2006 à 16:29:29    

nan dessiné à avec CRect

Reply

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.


Message édité par slash33 le 17-02-2006 à 17:12:05
Reply

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


Message édité par denebj le 17-02-2006 à 17:46:58
Reply

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.

Reply

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.


Message édité par slash33 le 17-02-2006 à 17:52:00
Reply

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 ?

Reply

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).


Message édité par slash33 le 17-02-2006 à 18:08:43
Reply

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 :D
exe : http://harko.free.fr/euro.exe
source : http://harko.free.fr/euro.rar

Reply

Marsh Posté le 17-02-2006 à 23:33:28   

Reply

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.

Reply

Marsh Posté le 18-02-2006 à 00:27:10    

oui, j'ai pas clippé :D

Reply

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  :D  :D. 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.


Message édité par denebj le 18-02-2006 à 14:27:30
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed