home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 18
/
CD_ASCQ_18_111294_W.iso
/
dos
/
prg
/
c
/
x_lib10
/
demo06.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1994-10-18
|
7KB
|
362 lines
/*----- demo06.cpp
sujets :
- ajout d'un bloc de caractères
- ajout d'une zone statique
- surcharge du membre on_goto()
*/
/*-----
définitions
*/
#include "xe.h" /* gestionnaire d'événements */
#include "xk.h" /* constantes clavier */
#include "xo.h" /* définitions des objets */
#include "xw.h" /* gestionnaire de fenêtres */
/*-----
classe de fenêtre MyWin
Constructeur de MyWin :
- titre str.
Destructeur de MyWin :
- aucun destructeur spécifique.
Définition de MyWin :
- largeur de 60 colonnes,
- hauteur de 15 lignes,
- fenêtre standard (cadre, titre, ombre, déplaçable, modale).
Membre on_call() :
- il est déclenché lorsqu'un objet est appelé pour exécution.
- en paramètre, on_call() apporte l'adresse de l'objet courant
demandant cette exécution.
Membre on_char() :
- il est déclenché pour tout caractère non reconnu par la fenêtre
ou ses objets.
- en paramètre, on_char() apporte le code du caractère saisi.
Membre on_goto() :
- il est déclenché à chaque arrivée sur le nouvel objet courant
de la fenêtre.
*/
class MyWin : public XWin
{
protected :
virtual void on_call (XObj *obj);
virtual void on_char (int key);
virtual void on_goto (XObj *obj);
protected :
XStatic * o_msg;
public :
MyWin (const char *str);
};
MyWin::MyWin (const char *str)
: XWin(60, 15)
{
/* associe un titre à la fenêtre
*/
head(str);
/* ajout du cadre
identificateur : 1
style : enfoncé
*/
link(new XBox(1, 1, 1, 28, 5, 0, 1));
/* ajout du cadre
identificateur : 2
style : enfoncé
*/
link(new XBox(2, 1, 29, 28, 5, 0, 1));
/* ajout du bloc de caractères
identificateur : 3
style : normal
*/
link(new XChar(2, 11, 1, 56, 1, 196, 0));
/* ajout de l'étiquette
identificateur : 2000
raccourci clavier : ALT-C
*/
link(new XLabel(2000, 1, 2, "&Checks:", xk_aC));
/* ajout des cases à cocher 2001, 2002 et 2003
*/
link(new XCheck(2001, 2, 3, 24, "Check &1", xk_a1));
link(new XCheck(2002, 3, 3, 24, "Check &2", xk_a2));
link(new XCheck(2003, 4, 3, 24, "Check &3", xk_a3));
/* ajout de l'étiquette
identificateur : 3000
raccourci clavier : aucun
*/
link(new XLabel(3000, 1, 30, "Radios:", 0));
/* ajout des boutons radio 3001, 3002 et 3003
*/
link(new XRadio(3001, 2, 31, 24, "Radio &A", xk_aA));
link(new XRadio(3002, 3, 31, 24, "Radio &B", xk_aB));
link(new XRadio(3003, 4, 31, 24, "Radio &C", xk_aC));
/* bouton radio 3001 déjà enfoncé
*/
xo(addr(3001), XRadio)->setv(0);
/* ajout de la zone statique
identificateur : 9000
style : aligné à gauche
*/
o_msg = (XStatic *)link(new XStatic(9000, 12, 1, 56, -1));
/* ajout du bouton poussoir Ok
identificateur : 1000
raccourci clavier : ALT-O
*/
link(new XPush(1000, 7, 45, 10, "&Ok", xk_aO));
/* ajout du bouton poussoir Quitte
identificateur : 1001
raccourci clavier : ALT-Q
*/
link(new XPush(1001, 9, 45, 10, "&Quitte", xk_aQ));
}
void MyWin::on_call (XObj *obj)
{
int typ, idt;
/* récupére le type de l'objet
*/
typ = obj->type();
/* récupère l'identificateur de l'objet
*/
idt = obj->id();
/* si exécution d'un bouton poussoir
*/
if (typ == xo_PUSH)
{
/* enfonce le bouton
*/
xo(obj, XPush)->push(1);
/* ferme la fenêtre
*/
hide();
}
/* si exécution d'une case à cocher
*/
else if (typ == xo_CHECK)
{
/* inverse l'état de la case à cocher
*/
xo(obj, XCheck)->revv(1);
}
/* si exécution d'un bouton radio
*/
else if (typ == xo_RADIO)
{
/* enfonce le bouton
*/
xo(obj, XRadio)->setv(1);
}
/* si exécution d'une étiquette
*/
else if (typ == xo_LABEL)
{
/* si étiquette des cases à cocher
*/
if (idt == 2000)
curr(2001);
/* si étiquette des boutons radio
*/
else if (idt == 3000)
curr(3001);
}
}
void MyWin::on_char (int key)
{
/* si caractère ESCAPE
*/
if (key == xk_ESC)
/* alors ferme la fenêtre
*/
hide();
}
void MyWin::on_goto (XObj *obj)
{
char * str;
/* selon identificateur de l'objet courant
*/
switch(obj->id())
{
case 1000 : /* boutons poussoir */
str = "XPush Ok";
break;
case 1001 :
str = "XPush Quitte";
break;
case 2001 : /* cases à cocher */
str = "XCheck 1";
break;
case 2002 :
str = "XCheck 2";
break;
case 2003 :
str = "XCheck 3";
break;
case 3001 : /* boutons radio */
str = "XRadio A";
break;
case 3002 :
str = "XRadio B";
break;
case 3003 :
str = "XRadio C";
break;
default :
str = 0;
break;
}
if (str != 0)
o_msg->defs(1, str);
}
/*-----
app_init() - initialisation de l'application
L'initialisation de l'application passe par :
- l'initialisation globale du gestionnaire de fenêtres,
- l'affichage du bureau.
*/
void app_init (void)
{
/* initialise tous les gestionnaires en une seule passe
*/
xw.full(1);
/* affiche le bureau
*/
xw.desk();
}
/*-----
app_quit() - terminaison de l'application
La terminaison de l'application passe par :
- la terminaison globale du gestionnaire de fenêtres.
*/
void app_quit (void)
{
/* quitte tous les gestionnaires en une seule passe
*/
xw.full(0);
}
/*-----
app_exec() - exécution de l'application
L'exécution de l'application passe par :
- la création d'une fenêtre de type MyWin,
- l'ouverture de la fenêtre,
- la lecture de chaque événement,
- l'évaluation de l'événement récupéré.
L'exécution prend fin lorsque plus aucune fenêtre ne reste ouverte.
*/
void app_exec (void)
{
XEvn evn;
MyWin * win;
/* crée la fenêtre MyWin
*/
win = new MyWin("MA FENETRE");
/* ouvre la fenêtre créée
*/
win->topw();
/* boucle de lecture des événements
*/
while (1)
{
/* lit le prochain événement
*/
xe.next(evn);
/* si aucune fenêtre après évaluation de l'événement récupéré
*/
if (xw.eval(evn) == 0)
/* alors quitte la boucle
*/
break;
}
/* détruit la fenêtre (déjà fermée)
*/
delete win;
}
void main (void)
{
/* initialisation de l'application
*/
app_init();
/* exécution de l'application
*/
app_exec();
/* fin de l'application
*/
app_quit();
}