Motif reconnaît deux types de chaînes de caractères :
MOTIF fournit de nombreuses fonctions de manipulation de chaînes de type XmString (concatenation, recopie, etc...) et de conversion entre les char * et les XmString.
En voici quelques unes :
Dans une application MOTIF, une police de caractères est une variable de type XmFontList, créée à partir d'un objet Xlib de type XFontStruct, déjà étudié dans la partie du cours Xlib consacrée à l'affichage de texte.
Typiquement, voici les étapes nécessaires pour modifier la police de caractères utilisée par un widget :
Ce petit exemple montre comment on peut changer la fonte de caractères
d'un PushButton figurant dans une barre de menu.
Etudier en particulier le rôle de chacun des deux objets charset et menu_bar_font.
Spécifier une police de caractères
/*-----------------------------*/
load_font(font_info, font_name)
/*-----------------------------*/
XFontStruct **font_info;
char *font_name;
{
/* on accede a la fonte */
if((*font_info = XLoadQueryFont(display, font_name))
== NULL) {
(void) fprintf(stderr,
"Police de caractéres %s non trouvée \n",
font_name);
exit (-1);
}
}
Exemple d'utilisation
XFontStruct *fnt;
XmFontList menu_bar_font; /* font pour les boutons du menu */
XmStringCharSet charset =
(XmStringCharSet) XmSTRING_DEFAULT_CHARSET;
.
.
.
/* C'EST ICI QUE C'EST INTERESSANT !!! */
load_font(&fnt,"vr-20");
menu_bar_font = XmFontListCreate(fnt, charset);
menu_bar = XmCreateMenuBar (parent, "menu_bar", NULL, 0);
XtManageChild (menu_bar);
menu_pane = XmCreatePulldownMenu (menu_bar, "menu_pane", NULL, 0);
/* ET ICI AUSSI !!! */
label_string = XmStringCreateLtoR("Exit" , charset);
n = 0;
XtSetArg (args[n], XmNlabelString, label_string); n++;
XtSetArg (args[n], XmNalignment,XmALIGNMENT_CENTER); n++;
XtSetArg (args[n], XmNfontList, menu_bar_font); n++;
button = XmCreatePushButton (menu_pane, "Quit", args, n);
XtManageChild (button);
michel.buffa@essi.fr