home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 18
/
CD_ASCQ_18_111294_W.iso
/
dos
/
prg
/
c
/
x_lib10
/
demo09.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1994-10-18
|
6KB
|
323 lines
/*----- demo09.cpp
sujets :
- ajout d'une zone statique
- ajout d'une liste
- surcharge du membre on_user()
- gestion de plusieurs fenêtres
- ajout d'une boîte de dialogue standard
*/
/*-----
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 */
#include <stdio.h>
/*-----
classe de fenêtre MyWin
Destructeur de MyWin :
- aucun destructeur spécifique.
Définition de MyWin :
- largeur de 62 colonnes,
- hauteur de 18 lignes,
- fenêtre standard (cadre, titre, ombre, déplaçable, amodale).
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.
Membre on_user() :
- il est déclenché à l'initiative de l'objet courant pour informer
d'un changement dans son état.
- en paramètres, on_user() apporte l'adresse de l'objet courant et
le code d'information spécifique à l'objet.
*/
class MyWin : public XWin
{
protected :
virtual void on_call (XObj *obj);
virtual void on_char (int key);
virtual void on_user (XObj *obj, int val);
protected :
XStatic * o_sta;
XList * o_lis;
public :
MyWin (const char *str);
};
MyWin::MyWin (const char *str)
: XWin(62, 18)
{
int i;
char buf [32];
/* supprimer attribut xw_MODAL pour fenêtre amodale
*/
defw(xw_STDWIN & ~xw_MODAL);
/* associe un titre à la fenêtre
*/
head(str);
/* ajout d'un cadre sortant
*/
link(new XBox(1, 1, 2, 42, 3, 0, 1));
/* ajout de la zone statique
identificteur : 1001
*/
o_sta = (XStatic *)link(new XStatic(1001, 2, 4, 38, -1));
/* ajout d'un cadre sortant
*/
link(new XBox(1, 4, 2, 42, 11, 0, 1));
/* ajout de la liste
identificateur : 2001
*/
o_lis = (XList *)link(new XList(2001, 5, 4, 38, 9, 100, 30));
/* remplit la liste
*/
i = 0;
do
sprintf(buf, "%u", i++);
while (o_lis->addv(buf) != 0);
/* ajout du bouton poussoir Ok
identificateur : 9000
raccourci clavier : ALT-O
*/
link(new XPush(9000, 2, 46, 10, "&Ok", xk_aO));
/* ajout du bouton poussoir Quitte
identificateur : 9001
raccourci clavier : ALT-Q
*/
link(new XPush(9001, 4, 46, 10, "&Quitte", xk_aQ));
/* ajout du bouton poussoir Tous
identificateur : 9002
raccourci clavier : ALT-T
*/
link(new XPush(9002, 6, 46, 10, "&Tous", xk_aT));
/* ajout du bouton poussoir Aucun
identificateur : 9003
raccourci clavier : ALT-A
*/
link(new XPush(9003, 8, 46, 10, "&Aucun", xk_aA));
}
void MyWin::on_call (XObj *obj)
{
int idt;
idt = obj->id();
/* si exécution d'un bouton poussoir
*/
if (obj->type() == xo_PUSH)
{
/* enfonce le bouton
*/
xo(obj, XPush)->push(1);
/* si bouton Tous
*/
if (idt == 9002)
{
o_lis->selv(1, 1);
}
/* si bouton Aucun
*/
else if (idt == 9003)
{
o_lis->selv(1, 0);
}
/* sinon ferme la fenêtre
*/
else if (xw.yes("???", "Etes-vous sûr de vouloir quitter ?\n"))
hide();
}
}
void MyWin::on_char (int key)
{
/* si caractère ESCAPE
*/
if (key == xk_ESC)
/* alors ferme la fenêtre
*/
hide();
}
void MyWin::on_user (XObj *obj, int val)
{
char buf [32];
/* si changement dans liste
*/
if (obj->id() == 2001)
{
sprintf(buf, "USER:%u", val);
o_sta->defs(1, buf);
/* si bascule sélection user(3)
*/
if (val == 3)
o_lis->revv(1, -1);
/* si sélection Tous user(4)
*/
else if (val == 4)
o_lis->selv(1, 1);
/* si sélection Aucun user(5)
*/
else if (val == 5)
o_lis->selv(1, 0);
}
}
/*-----
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 * wi1;
MyWin * wi2;
/* crée les fenêtres MyWin
*/
wi1 = new MyWin("MA FENETRE 1");
wi2 = new MyWin("MA FENETRE 2");
/* ouvre les fenêtres créées
*/
wi1->topw();
wi2->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 les fenêtres (déjà fermées)
*/
delete wi2;
delete wi1;
}
void main (void)
{
/* initialisation de l'application
*/
app_init();
/* exécution de l'application
*/
app_exec();
/* fin de l'application
*/
app_quit();
}