Membres inscrits :2359
Membres en ligne : 0
Invités en ligne : 6


|
Conversation (Résolue) : PopupMenu-le menu contextuel s'affiche ou il veut |
sajaris (Membre)
Inscrit le : 23-11-2010
Messages: 47
Snippets: 0
Tutoriels: 0
Hors ligne |
bonjour,
Je desire creer un menu contextuel au clic droit de la souris. J'ai donc creer mon wxMenu et j'ai utilise le PopupMenu(menu,x,y) du wxwidget.
le x,y sont obtenu par : posx=wxGetMousePosition().x; posy=wxGetMousePosition().y;
Seulement le menu est toujour decalé, il faut que je reajuste par un posx-32 ou posy-40
et cela a chaque mene que j'affiche. Cela est du a quoi?
|
|
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1387
Snippets: 25
Tutoriels: 6
Site web
Hors ligne |
Salut.
Le comportement par défaut (celui que tu obtiens si tu ne spécifies pas les coordonnées d'affichage) fait que le coin supérieur gauche du menu correspond aux coordonnées de la souris.
Si tu demandes l'affichage avec ces coordonnées, tu obtiendras la même chose.
Par contre, il peut se passer le phénomène suivant : Il faut d'abord savoir que si tu appelles la méthode "PopupMenu" depuis la frame, ses coordonnées seront calculées par rapport à la zone client de la fenêtre. Imagines maintenant que tu possèdes un contrôle positionné à x=25 et y=5 par rapport à cette zone cliente. Si l'évènement déclenchant l'appel est géré par ce contrôle, les coordonnées de la variable wxEvent seront relatives à ce contrôle. If faudra donc les corriger en fonction de la position de ce dernier.
Je ne sais pas si mon explication est suffisamment claire : si ce n'est pas le cas, n'hésites pas à me le dire, je tâcherais de te fournir un exemple significatif.
@+ Xav'
|
Le nouveau portail wxWidgets francophone : www.wxdev.fr Ben en fait, vous y êtes déjà... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
|
sajaris (Membre)
Inscrit le : 23-11-2010
Messages: 47
Snippets: 0
Tutoriels: 0
Hors ligne |
salut, je crois que c'est effectivement claire. Puisque en effet je crée des popupmenu sur un wxGrid (un clic droit sur une cellule de la grid donne des options), et aussi dans un wxDialog qui apparait suite a un de mes bouton et je dois a chaque fois réajuster le popup.
et chose curieuse, jeles reajuste toujours en diminuant, puisque le popup apparait toujours loin devant et vers le bas, comme si j'augmentait le x et y.
SI je comprend ton explication, je dois chaque fois faire l aframe principal moins, les coordonnée du dialogue ou de la grid dans le dialog, etc. ---------- XAVIOU, ton hypothèse est correct.effectivement, cetai cela le probleme: A chaque clic droit sur un controle je droit reterir les x et y de tous les contrôle parents, et cela marche bien, le popup s'affiche ua bon endroit.
Si le contrôle est trop imbriqué alors....OUF.... mais c'est pas le cas, c'est juste des boite de dialog et des wxgrid.
Mais ca marche trres bien.
C'est cool Xaviou
Dernière modification par sajaris (06-06-2011 01:06:10)
|
|
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1387
Snippets: 25
Tutoriels: 6
Site web
Hors ligne |
Salut.
Sinon, tu peux essayer sans spécifier les coordonnées d'affichage du menu, normalement, ça fait la même chose.
@+ Xav'
|
Le nouveau portail wxWidgets francophone : www.wxdev.fr Ben en fait, vous y êtes déjà... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
|
ajm (Membre)
Inscrit le : 16-03-2011
Messages: 82
Snippets: 0
Tutoriels: 0
Hors ligne |
Salut,
Moi je fait apparaître le PopupMenu sur wxGrid de la façon suivante:
void wxGridPopupMenuFrm::WxGrid1CellRightClick(wxGridEvent& event) { WxGrid1->SetGridCursor(event.GetRow(),event.GetCol()); wxWindow::PopupMenu(WxPopupMenu1); }
http:/www.youtube.com/watch?v=anbh5N-euy8
Dernière modification par ajm (29-07-2011 09:17:58)
|
|
sajaris (Membre)
Inscrit le : 23-11-2010
Messages: 47
Snippets: 0
Tutoriels: 0
Hors ligne |
ca pourrai etre une bonne solution je vais l'essayé
|
|
ajm (Membre)
Inscrit le : 16-03-2011
Messages: 82
Snippets: 0
Tutoriels: 0
Hors ligne |
Je crois que j'ai trouvé une meilleure solution.
Si on veut par exemple afficher le WxPopupMenu1 dans un WxGrid1, ajoute
WxGrid1->PopupMenu(WxPopupMenu1);
là on n'a pas besoin d'ajouter les coordonnées. J'ai déjà testé cette méthode.
|
|
|