X-Window est le système graphique en usage sur pratiquement tous les Unix et assimilés. Dans un tel environnement, la gestion graphique est complètement séparée et indépendante du système. Elle est également complètement facultative.
X-Window est donc une application à part entière qui va se charger de gérer un ou plusieurs écrans graphiques. Tu peux également en lancer plusieurs instances, bien qu'elles soient gourmandes en mémoire.
Cette application est donc un serveur complètement indépendant du système et des autres applications : celles-ci se connectent au serveur X et lui envoient des ordres que le serveur traduit à l'écran. Dans l'absolu, il n'est même pas nécessaire que ces applications tournent sur la même machine que le serveur X. Par exemple, tu peux lancer OpenOffice sur ton PC de bureau et lui demander de s'afficher sur l'écran de ton laptop, via le réseau.
En outre, le serveur X va se charger de gérer des fenêtres, de les superposer, etc. mais elles sont, par défaut, complètement transparentes et ne sont ornées d'aucune décoration. C'est, là encore, une application dédiée et indépendante appelée Window Manager qui va se charger de surveiller l'activité du serveur et décorer les fenêtres quand elles sont créées. De fait, tu peux tuer cette application sans fermer les autres. Tu vois alors les fenêtres se « déshabiller » sans que leur contenu soit perdu et sans perturber les applications qui sont derrière.
C'est sur cette base que s'appuient les autres bibliothèques graphiques de plus haut niveau. Tu peux utiliser la X-Lib directement si cela te chante (personnellement, j'aime bien) mais cela peut vite devenir rébarbatif.
En voici un :Est-ce que vous pourriez me donner un exemple de code qui affiche une fenêtre vide sans rien dessu?
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 #include <stdio.h> #include <X11/Xlib.h> #include <errno.h> int main (void) { Display * dpy = NULL; Window win; XEvent ev; XSetWindowAttributes swa; dpy=XOpenDisplay(""); if (dpy!=NULL) { win = XCreateSimpleWindow (dpy, /* Connexion vers le serveur */ DefaultRootWindow(dpy), /* Fenêtre racine parente */ 10, 10, /* Coin sup. gauche en 10,10 */ 320,200, /* Taille : 320 x 200 */ 1, /* Epaisseur bordure : 1 px */ 0xff0000, /* Bordure rouge */ 0x0000ff); /* Fond bleu */ swa.event_mask = ButtonPressMask; /* On change certains attri- */ XChangeWindowAttributes (dpy, /* buts de la fenetre. Juste */ win, /* le masque des événements, */ CWEventMask, /* en fait, et parmi eux, on */ &swa); /* ne garde que ButtonPress. */ XMapWindow (dpy,win); /* Affiche la fenêtre */ do { XNextEvent (dpy,&ev); /* Attend le prochain evenement */ } while (ev.type != ButtonPress); /* Continue jusqu'à un clic */ XDestroyWindow (dpy,win); /* Tue la fenêtre */ XCloseDisplay (dpy); /* Referme la connexion */ } else perror ("Connexion au serveur X impossible"); return 0; }
Partager