home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 18 / CD_ASCQ_18_111294_W.iso / dos / prg / c / x_lib10 / demo03.cpp < prev    next >
C/C++ Source or Header  |  1994-10-18  |  4KB  |  214 lines

  1. /*----- demo03.cpp
  2.  
  3.     sujets :
  4.  
  5.         - ajout de boutons poussoir
  6.         - surcharge du membre on_call()
  7.  
  8. */
  9.  
  10. /*-----
  11.     définitions
  12. */
  13. #include    "xe.h"                /* gestionnaire d'événements    */
  14. #include    "xk.h"                /* constantes clavier            */
  15. #include    "xo.h"                /* définitions des objets        */
  16. #include    "xw.h"                /* gestionnaire de fenêtres        */
  17.  
  18. /*-----
  19.     classe de fenêtre MyWin
  20.  
  21.     Constructeur de MyWin :
  22.  
  23.         - titre str.
  24.  
  25.     Destructeur de MyWin :
  26.  
  27.         - aucun destructeur spécifique.
  28.  
  29.     Définition de MyWin :
  30.  
  31.         - largeur de 60 colonnes,
  32.         - hauteur de 17 lignes,
  33.         - fenêtre standard (cadre, titre, ombre, déplaçable, modale).
  34.  
  35.     membre on_call() :
  36.  
  37.         - il est déclenché lorsqu'un objet est appelé pour exécution.
  38.  
  39.         - en paramètre, on_call() apporte l'adresse de l'objet courant
  40.           demandant cette exécution.
  41.  
  42.     Membre on_char() :
  43.  
  44.         - il est déclenché pour tout caractère non reconnu par la fenêtre
  45.           ou ses objets.
  46.  
  47.         - en paramètre, on_char() apporte le code du caractère saisi.
  48.  
  49. */
  50.  
  51. class    MyWin : public XWin
  52.         {
  53.     protected :
  54.         virtual    void    on_call (XObj *obj);
  55.         virtual    void    on_char (int key);
  56.  
  57.     public :
  58.         MyWin (const char *str);
  59.  
  60.         };
  61.  
  62. MyWin::MyWin (const char *str)
  63.         : XWin(60, 17)
  64.         {
  65.         /* associe un titre à la fenêtre
  66.         */
  67.         head(str);
  68.  
  69.         /* ajout du bouton poussoir Ok
  70.             identificateur :    1000
  71.             raccourci clavier :    ALT-O
  72.         */
  73.         link(new XPush(1000, 11, 45, 10, "&Ok", xk_aO));
  74.  
  75.         /* ajout du bouton poussoir Quitte
  76.             identificateur :    1001
  77.             raccourci clavier :    ALT-Q
  78.         */
  79.         link(new XPush(1001, 13, 45, 10, "&Quitte", xk_aQ));
  80.         }
  81.  
  82. void    MyWin::on_call (XObj *obj)
  83.         {
  84.         /* si exécution d'un bouton poussoir
  85.         */
  86.         if (obj->type() == xo_PUSH)
  87.             {
  88.             /* enfonce le bouton
  89.             */
  90.             xo(obj, XPush)->push(1);
  91.  
  92.             /* si bouton Quitte
  93.             */
  94.             if (obj->id() == 1001)
  95.                 /* ferme la fenêtre
  96.                 */
  97.                 hide();
  98.  
  99.             }
  100.  
  101.         }
  102.  
  103. void    MyWin::on_char (int key)
  104.         {
  105.         /* si caractère ESCAPE
  106.         */
  107.         if (key == xk_ESC)
  108.             /* alors ferme la fenêtre
  109.             */
  110.             hide();
  111.  
  112.         }
  113.  
  114. /*-----
  115.     app_init() - initialisation de l'application
  116.  
  117.     L'initialisation de l'application passe par :
  118.  
  119.         - l'initialisation globale du gestionnaire de fenêtres,
  120.         - l'affichage du bureau.
  121.  
  122. */
  123.  
  124. void    app_init (void)
  125.         {
  126.         /* initialise tous les gestionnaires en une seule passe
  127.         */
  128.         xw.full(1);
  129.  
  130.         /* affiche le bureau
  131.         */
  132.         xw.desk();
  133.         }
  134.  
  135. /*-----
  136.     app_quit() - terminaison de l'application
  137.  
  138.     La terminaison de l'application passe par :
  139.  
  140.         - la terminaison globale du gestionnaire de fenêtres.
  141.  
  142. */
  143.  
  144. void    app_quit (void)
  145.         {
  146.         /* quitte tous les gestionnaires en une seule passe
  147.         */
  148.         xw.full(0);
  149.         }
  150.  
  151. /*-----
  152.     app_exec() - exécution de l'application
  153.  
  154.     L'exécution de l'application passe par :
  155.  
  156.         - la création d'une fenêtre de type MyWin,
  157.         - l'ouverture de la fenêtre,
  158.         - la lecture de chaque événement,
  159.         - l'évaluation de l'événement récupéré.
  160.  
  161.     L'exécution prend fin lorsque plus aucune fenêtre ne reste ouverte.
  162.  
  163. */
  164.  
  165. void    app_exec (void)
  166.         {
  167.         XEvn    evn;
  168.         MyWin *    win;
  169.  
  170.         /* crée une fenêtre MyWin
  171.         */
  172.         win = new MyWin("MA FENETRE");
  173.  
  174.         /* ouvre la fenêtre créée
  175.         */
  176.         win->topw();
  177.  
  178.         /* boucle de lecture des événements
  179.         */
  180.         while (1)
  181.             {
  182.             /* lit le prochain événement
  183.             */
  184.             xe.next(evn);
  185.  
  186.             /* si aucune fenêtre après évaluation de l'événement récupéré
  187.             */
  188.             if (xw.eval(evn) == 0)
  189.                 /* alors quitte la boucle
  190.                 */
  191.                 break;
  192.  
  193.             }
  194.  
  195.         /* détruit la fenêtre (déjà fermée)
  196.         */
  197.         delete win;
  198.         }
  199.  
  200. void    main (void)
  201.         {
  202.         /* initialisation de l'application
  203.         */
  204.         app_init();
  205.  
  206.         /* exécution de l'application
  207.         */
  208.         app_exec();
  209.  
  210.         /* fin de l'application
  211.         */
  212.         app_quit();
  213.         }
  214.