C.
RECANATI
Interfaces
Graphiques
ILOG
2, septembre 2004
TP 6
Exercice
1: (exercice form.c)
On veut réaliser un programme qui affiche
la fenêtre suivante:
![]()
![]()
![]()
![]()
![]()

Les widgets seront
placés à l'interieur d'un XmForm. Pour
régler les positions (et les changements de taille) dans le
XmForm, on réalisera les attachements
adéquats.
Les boutons Quitter et
Recommencer serviront respectivement à quitter et à relancer le
programme. Pour relancer le programme, on passera argv[0] à la callback et on utilisera la
commande execl(argv[0], argv[0],
NULL).
Les trois premiers boutons
lorsqu'ils seront activés feront un printf du texte
situé dans le XmText
situé en vis-à-vis. On leur associera une même procédure
de callback en les créant dans une boucle du type:
#define
NFIELDS 3
static
char*
button_name
[NFIELDS] = { "Nom", "Prenom",
"Telephone" };
static
char*
text_name
[NFIELDS] = { "e1", "e2", "e3"
};
Widget edit [
NFIELDS ];
Widget pushb [
NFIELDS ];
...
for (i = 0;
i<NFIELDS; i++)
{
pushb
[ i ] = XtVaCreateManagedWidget (... );
edit
[ i ] = XtVaCreateManagedWidget (... );
XtAddCallback
(pushb [ i ] , ... ); // quel client_data passer en
argument ?
}
Exercice
2: (variante de l’exercice
précédent)
1)
Au lieu d’afficher par printf le contenu des
XmText, le
programme intercepte l’activation des boutons pour afficher le contenu du
texte correspondant en vis-à-vis dans un XmMessageBox.
La boîte de message instaure un dialogue modal et ne fait pas
apparaître le bouton Cancel. Le bouton Help apparaît en
grisé
(fonction
XtSetSensitive
(widget, False) ).
2)
Affecter la ressource XmNkeyboardFocusPolicy en utilisant l’argument fallback de XtVaAppInitialize. Dans le mode explicit, tester
l'appartenance des widgets à différents groupes, en observant les
modifications du focus sur enfoncement des touches tab et des flèches.
Exercice
3:
1)
créer une ScrolledWindow
fille d'un ApplicationShell
dans laquelle on place un Label. On affectera les
ressources XmNscrollingPolicy et XmNscrollbarDisplayPolicy de
sorte que les scrollbars soient affichées automatiquement quand elles
sont requises (par rapport à la taille du texte ou du Pixmap figurant
dans le Label).
2)
tester le programme avec un fichier de ressources dans lequel on affectera les
ressources labelType et labelPixmap du Label pour qu'il
affiche le fichier bitmap
/usr/openwin/include/X11/bitmaps/escherknot.
3)
tester le programme avec un autre fichier de ressources pour que le
Label affiche une ligne multiple (sur plusieurs lignes),
par ex:
*label*labelString: ceci est une ligne
multiple \n\
figurant
sur plusieurs lignes \n\
et
affichee dans une ScrolledWindow
Modifier
également la ressource XmNalignment pour avoir un
alignement à gauche, centré ou à
droite.
Exercice
4: Une horloge digitale utilisant un Timer. On crée un Label puis on lance une fonction update qui met à jour l’heure dans la
chaîne affichée par le Label et relance une
mise-à-jour 1 seconde plus tard.
F
#include
<time.h>
static void update (Widget w)
{
long
tloc;
char
tc
[64];
time
(&tloc);
/*
recupère l’heure dans tloc */
sprintf
(tc, “%s”, ctime (&tloc));
/*
la convertit en chaine de caractères */
tc
[ strlen(tc) - 1] = 0;
/*
supprime le return */
...
}