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

olivier856 Messages postés 2 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 21 avril 2003 - 21 avril 2003 à 13:16
cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 - 21 avril 2003 à 20:33
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;
}
}

}
A voir également:

1 réponse

cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 3
21 avril 2003 à 20:33
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
0
Rejoignez-nous