/* demo-07.c : demonstration de EZ-Draw * * Edouard.Thiel@lif.univ-mrs.fr - 02/07/2008 - version 1.2 * * Compilation sous Unix : * gcc -Wall demo-07.c ez-draw.c -o demo-07 -lX11 -lXext -L/usr/X11R6/lib * Compilation sous Windows : * gcc -Wall demo-07.c ez-draw.c -o demo-07.exe -lgdi32 * * This program is free software under the terms of the * GNU Lesser General Public License (LGPL) version 2.1. */ #include "ez-draw.h" /* En global */ Ez_window win1, win2, win3 = None; int show2 = 0; void win3_on_expose (Ez_event *ev) { ez_draw_text (ev->win, EZ_TL, 10, 10, "Si vous fermez cette fenetre, elle sera detruite."); } /* L'utilisateur a clique' sur l'icone fermeture de la fenetre */ void win3_on_window_close (Ez_event *ev) { (void) ev; /* Parametre inutilise' */ ez_window_destroy (win3); win3 = None; } void win3_event (Ez_event *ev) { switch (ev->type) { case Expose : win3_on_expose (ev); break; case WindowClose : win3_on_window_close (ev); break; } } void win2_on_expose (Ez_event *ev) { ez_draw_text (ev->win, EZ_TL, 10, 10, "Si vous fermez cette fenetre, elle sera simplement cachee."); } void win2_on_window_close (Ez_event *ev) { (void) ev; ez_window_show (win2, 0); show2 = 0; } void win2_event (Ez_event *ev) { switch (ev->type) { case Expose : win2_on_expose (ev); break; case WindowClose : win2_on_window_close (ev); break; } } void win1_on_expose (Ez_event *ev) { ez_draw_text (ev->win, EZ_TL, 10, 10, "Cliquez dans cette fenetre (pour donner le focus clavier),\n" "puis tapez :\n" " - sur 'm' pour montrer ou cacher la fenetre 2 ;\n" " - sur 'c' pour creer ou detruire la fenetre 3 ;\n" " - sur 'q' pour quitter.\n" "\n" "Si vous fermez cette fenetre, le programme se terminera."); } void win1_on_key_press (Ez_event *ev) { switch (ev->key_sym) { case XK_q : ez_quit (); break; case XK_m : show2 = !show2; /* on affiche ou on cache la fenetre */ ez_window_show (win2, show2); break; case XK_c : if (win3 == None) /* si la fenetre n'existe pas, on la cree */ win3 = ez_window_create (380, 220, "Fenetre 3", win3_event); else { ez_window_destroy (win3); win3 = None; } break; } } void win1_on_window_close (Ez_event *ev) { (void) ev; ez_quit (); } void win1_event (Ez_event *ev) { switch (ev->type) { case Expose : win1_on_expose (ev); break; case KeyPress : win1_on_key_press (ev); break; case WindowClose : win1_on_window_close (ev); break; } } int main () { if (ez_init() < 0) exit(1); win1 = ez_window_create (400, 300, "Demo 07 : plusieurs fenetres", win1_event); win2 = ez_window_create (400, 200, "Fenetre 2", win2_event); ez_window_show (win2, show2); /* Par defaut, fermer n'importe quelle fenetre provoque la fin du programme. On desactive cette fin automatique ; fermer une fenetre provoquera alors l'evenement WindowClose pour ce window. */ ez_auto_quit (0); ez_main_loop (); exit(0); }