Xlib: відмінності між версіями

[неперевірена версія][неперевірена версія]
Вилучено вміст Додано вміст
ZéroBot (обговорення | внесок)
м r2.7.1) (робот додав: cs, de, es, fi, fr, ja, pl, zh
Рядок 52:
Наступний приклад програми встановлює з'єднання з X сервером і виводить на екран вікно з привітанням:
 
<source lang=C>
/*
Компілюється таким рядком: cc test.c -o test -lX11
*/
 
#include <X11/Xlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
 
extern int errno;
 
int main (void) {
Display *d;
Window w;
XEvent e;
char *msg = "Hello, World!";
int s;
 
/* З'єднатися з X сервером, якщо X сервер на віддаленій машині
* слід дозволити на машині, де запущений X Server
* віддалені з'єднання командою xhost+ (дивись man xhost)
*/
if ((d = XOpenDisplay(getenv("DISPLAY"))) == NULL) {
printf ("Can't connect X server: %s\n", strerror (errno));
exit (1);
}
 
s = DefaultScreen (d);
 
/* Створити вікно */
w = XCreateSimpleWindow (d, RootWindow (d, s), 10, 10, 200, 200, 1,
BlackPixel (d, s), WhitePixel (d, s));
 
/* На які події будемо реагувати */
XSelectInput (d, w, ExposureMask | KeyPressMask);
 
/* Вивести вікно на екран */
XMapWindow (d, w);
 
/* Нескінчний цикл обробки подій */
while (1) {
XNextEvent (d, &e);
 
/* Перерисувати вікно */
if (e.type == Expose) {
XFillRectangle (d, w, DefaultGC (d, s), 20, 20, 10, 10);
XDrawString (d, w, DefaultGC(d, s), 50, 50, msg, strlen (msg));
}
/* При натисканні кнопки-вихід */
if (e.type == KeyPress)
break;
}
 
/* Закрити з'єднання з X сервером */
XCloseDisplay(d);
 
return 0;
}
</source>
 
Клієнт (програма) створює з'єднання з X сервером функцією XOpenDisplay, в яку передається вказівник на DISPLAY, визначений через змінну середовища виконання. У UNIX це можна зробити командою export DISPLAY = ".0:0". В якості змінної DISPLAY можна вказати і віддалену машину з запущеним X сервером. Функція (макрос) DefaultScreen вибирає поточний екран (в X Window може бути декілька екранів), XCreateSimpleWindow створює вікно, а XSelectInput визначає події, на які вікно має реагувати. XMapWindow виводить вікно на екран, а XNextEvent вибирає з черги подію, яку вище було визначено. При подію Expose у вікні малюється прямокутник і виводиться рядок "Hello World!". При натисканні клавіші на клавіатурі програма завершує роботу.