Les attributs de fenêtre

/* wattrib.c */

/* changement des attributs d'une fenetre */

#include <stdio.h>
#include <X11/Xlib.h>

GC      gc; 
Display *display; 
int     screen; 
Window  win, root; 
unsigned long white_pixel, black_pixel; 
XSetWindowAttributes attrib;
unsigned long masq_attrib;
 
main() {
  if ((display = XOpenDisplay ("")) == NULL) { 
    fprintf (stderr, "Can't open Display\n"); 
    exit (1); 
  } 
  gc = DefaultGC (display, screen); 
  screen = DefaultScreen (display); 
  root = RootWindow (display, screen); 
  white_pixel = WhitePixel (display, screen); 
  black_pixel = BlackPixel (display, screen); 
  win = XCreateSimpleWindow (display, root,  
			     0, 0, 100, 90, 2, black_pixel, white_pixel); 
  XSelectInput (display, win, ExposureMask | ButtonPressMask); 
  XStoreName (display, win, "wattrib"); 
  masq_attrib = CWBackingStore;
  attrib.backing_store = Always;
  XChangeWindowAttributes (display, win, masq_attrib, &attrib);
  XMapWindow (display, win); 
 
  for (;;) { 
    XEvent ev; 
    XNextEvent (display, &ev); 
    switch (ev.type) { 
    case Expose :  
      XDrawString (display, win, gc, 10, 30, "coucou !", 8);  
      break; 
    case ButtonPress :
      XDrawString (display, win, gc, ev.xbutton.x, ev.xbutton.y, "ici", 3);
    default : 
      break;            
    } 
  } 
}

Exécution :

Cliquez pour écrire içi, puis masquez la fenêtre. Démasquez-la !

Fonctionnement de ce programme:

Les attributs d'une fenêtre :

background_pixmap pixmap de fond
background_pixel couleur de fond
border_pixmap pixmap de bordure
border_pixel couleur de bordure
bit_gravity gravité du contenu
win_gravity gravité des fenêtres filles
backing_store sauvegarde du contenu des zones cachées de la fenêtre
...
event_mask masque des événements
do_not_propagate_mask masque des événements à ne pas propager
override_redirect politique vis à vis du gestionnaire de fenêtre
colormap palette de couleur
cursor curseur

XSetWindowAttributes attrib; attrib est la structure des caractéristiques de la fenêtre, structure partiellement renseignée.
unsigned long masq_attrib; est le masque des attributs renseignés dans la structure attrib.
Si vous affectez background_pixel d'attrib avec un pixel-couleur de fond, ajoutez le "drapeau" CWBackPixel au masque masq_attrib. Par contre, le champ background_pixmap ne sera pas renseigné.

Le BackingStore est assuré sur certaines stations X : elles mémorisent les parties cachées des fenêtres dans une mémoire d'arrière plan. Néanmois, vos applications doivent obligatoirement pouvoir s'en passer.

XChangeWindowAttributes modifie les attributs sélectionnés dans le masque masq_attrib aux valeurs indiquées dans attrib.

Exercice arrplan.c :

Votre programme change la couleur d'arrière plan (noir/blanc) de sa fenêtre selon la lettre tapée n(oir) ou b(lanc).

programme suivant index général fonctions de la XLib événements types dans XLib