WikiSort.ru - Не сортированное

ПОИСК ПО САЙТУ | о проекте

Xlib (X library, рус. библиотека «икс») — библиотека функций клиента системы X Window, написанная на языке Си.

Содержит функции для взаимодействия с т. н. X-сервером. Библиотека позволяет использовать более высокий уровень абстракции, без знания деталей работы основного протокола системы X Window.

Некоторые пользовательские приложения используют Xlib напрямую (например, Opera), другие используют специальные инструментарии «виджетов» - «надстройки» над базовой библиотекой Xlib.

Xlib и другие библиотеки её использующие

Библиотека Xlib появилась около 1985 года и на настоящее время используется как основа и как основной графический интерфейс пользователя во многих Юникс-подобных операционных системах.

Библиотека XCB - попытка разработки замены Xlib.

Функции XLib

Функции XLib могут быть сгруппированы в несколько категорий:

  1. Операции управления соединением с X сервером, такие как XOpenDisplay, XCloseDisplay
  2. Запросы X серверу, такие как XCreateWindow, XCreateSimpleWindow, XCreateGC, XCreateColomap
  3. Операции клиентской части, такие как управления событиями: XNextEvent, или операции с локальными данными XCreateImage.

Пример программы

Следующий пример программы устанавливает соединение с X сервером и выводит на экран окно с приветствием:

 /*
  Компилируется след. строкой:   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;
   const 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 = XDefaultScreen(d);

   /* Создать окно */
   w = XCreateSimpleWindow(d, RootWindow(d, s), 10, 10, 200, 200, 1,
                           XBlackPixel(d, s), XWhitePixel(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;
 }

Клиент (программа) создает соединение с X сервером функцией XOpenDisplay, в которую передается указатель на DISPLAY, определенный через переменную среды исполнения. В UNIX это можно сделать командой export DISPLAY=":0.0". В качестве переменной DISPLAY можно указать и удаленную машину с запущенным X сервером. Функция (макрос) DefaultScreen выбирает текущий экран (в X Window может быть несколько экранов), XCreateSimpleWindow создает окно, а XSelectInput определяет события, на которые окно должно реагировать. XMapWindow выводит окно на экран, а XNextEvent выбирает из очереди событие, которое выше было определено. При событии Expose в окне рисуется прямоугольник и выводится строка "Hello World!". При нажатии клавиши на клавиатуре программа завершает работу.

Ссылки

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии