Déplacement et synchronisation dans de 2 fenetres! Langage C !!!! Merci...

Signaler
Messages postés
2
Date d'inscription
vendredi 11 avril 2003
Statut
Membre
Dernière intervention
21 avril 2003
-
Messages postés
518
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 novembre 2007
-
Bonjour ,

J'ai VRAIMENT besoin de votre aide !!!! Voilà.....

le programme (en langage C) ci joint permet de créer deux fenêtres (redimensionnables).
Mon problème est le suivant: j'aimerais déplacer diagonalement dans une fenêtre une balle (représentée par le caractère "o").
Et j'aimerais que cette balle se déplace d'une fenetre à l'autre. (ie quand elle sort de la fenetre A il faut qu'on la voit apparaitre dans la fenetre B)
Tout ça grace à ce merveilleux outil qu' est XWINDOW!!!

Merci à tout ceux qui auront pris le temps de lire ce bref message !!!!!!! Et merci à tout ceux qui pourront m'aider!!
JOYEUSE PAQUES A TOUS:::
:clown)

#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>

GC gc;
Display *display;
int screen;
Window wina, winb, root;
unsigned long white_pixel, black_pixel;
XSetWindowAttributes attrib;
unsigned long mask_attrib;

main() { if ((display XOpenDisplay ("")) NULL) {
fprintf (stderr, "Can't open Display\n");
exit (1);
}
gc = DefaultGC (display, screen);
screen = DefaultScreen (display);
root = RootWindow (display, screen);
white_pixel = WhitePixel (display, screen);
black_pixel = BlackPixel (display, screen);
wina = XCreateSimpleWindow (display, root,
0, 0, 200, 80, 5, black_pixel, white_pixel);
XSelectInput (display, wina, ButtonPressMask);
XStoreName (display, wina, "gravity_S");
XMapWindow (display, wina);
winb = XCreateSimpleWindow (display, root,
0, 0, 200, 80, 5, black_pixel, white_pixel);
XSelectInput (display, winb, ButtonPressMask);
XStoreName (display, winb, "gravity_NW");
XMapWindow (display, winb);
attrib.bit_gravity = SouthGravity;
mask_attrib = CWBitGravity;
XChangeWindowAttributes(display, wina, mask_attrib, &attrib);
attrib.bit_gravity = NorthWestGravity;
XChangeWindowAttributes(display, winb, mask_attrib, &attrib);

for (;;) {
XEvent ev;
XNextEvent (display, &ev);
switch (ev.type) {
case ButtonPress :
if (ev.xbutton.window==wina) {
XClearWindow (display, wina);
XDrawString (display, wina, gc, 10, 10, "O", 1);
}
if (ev.xbutton.window==winb) {
XClearWindow (display, winb);
XDrawString (display, winb, gc, 10, 10, "O", 1);
}
break;
default :
break;
}
}

}

1 réponse

Messages postés
518
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 novembre 2007
3
Je ne comprends pas trop bien, tu ve faire circuler une balle mais tu ne change pas les coordonnées de celle-ci dans la fenêtre, je ne vois pas comment elle peut bouger!!!
De plus les évennement que tu utilises ne sont pas les bons. Si tu ve que la balle change de fenêtre quand tu sort de la première il faut utiliser les evennement LeaveNotify et un autre, je sais plus trop lesquels c'est mais c'est un truc dans le style.
tu dois bien sûr fair avant un truc comme ca pour utiliser ces évennements.
XSelectInput (display, winb, ButtonPressMask | NotifyMask);

Ensuite il faut que tu fasses des fenêtres qui ne peuvent pas être modifées au niveau de leur taille.
Enfin, juste une chtite critique, ton évenement, il serais plus judicieux de le déclarer en dehors de la boucle for.
Voila, si tu ne trouve pas ou que tu as encore des problème envoi moi un message ou répond a celui-ci.
Bonne chance!
Bouba