Xlib: различия между версиями
[непроверенная версия] | [непроверенная версия] |
Содержимое удалено Содержимое добавлено
LucienBOT (обсуждение | вклад) м робот добавил: de:Xlib |
Спасено источников — 1, отмечено мёртвыми — 0. Сообщить об ошибке. См. FAQ.) #IABot (v2.0.8 |
||
(не показано 35 промежуточных версий 29 участников) | |||
Строка 1:
'''Xlib''' ('''X library''',
Содержит функции для взаимодействия с т. н. X-
Некоторые пользовательские приложения используют Xlib напрямую (например, [[Opera]]), другие используют специальные инструментарии «[[виджет]]ов» - «надстройки» над базовой библиотекой Xlib.
[[
* [[X Toolkit Intrinsics|Встроенные средства]] (Xt)
* [[Xaw|Набор виджетов Athena]] (Xaw)
* [[Motif]]
* [[GTK+]]
* [[Qt]] (версия для X11)
* [[wxWidgets]]
* [[Simple DirectMedia Layer|SDL]]
* [[SFML]]
Библиотека Xlib появилась около [[1985]] года и на настоящее время используется как основа и как основной [[графический интерфейс пользователя]] во многих [[Юникс]]-подобных [[операционная система|операционных системах]].
Строка 17 ⟶ 20 :
Библиотека [[XCB]] - попытка разработки замены Xlib.
== Функции XLib ==
Функции XLib могут быть сгруппированы в несколько категорий:
# Операции управления соединением с X сервером, такие как <code>XOpenDisplay</code>, <code>XCloseDisplay</code>
# Запросы X серверу, такие как <code>XCreateWindow</code>, <code>XCreateSimpleWindow</code>, <code>XCreateGC</code>, <code>XCreateColomap</code>
# Операции клиентской части, такие как управления событиями: <code>XNextEvent</code>, или операции с локальными данными <code>XCreateImage</code>.
== Пример программы ==
Следующий пример программы устанавливает соединение с 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;
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;
}
</source>
Клиент (программа) создает соединение с X сервером функцией <code>XOpenDisplay</code>, в которую передается указатель на DISPLAY, определенный через переменную среды исполнения. В [[UNIX]] это можно сделать командой export DISPLAY=":0.0". В качестве переменной DISPLAY можно указать и удаленную машину с запущенным X сервером. Функция (макрос) <code>DefaultScreen</code> выбирает текущий экран (в X Window может быть несколько экранов), <code>XCreateSimpleWindow</code> создает окно, а <code>XSelectInput</code>
определяет события, на которые окно должно реагировать. <code>XMapWindow</code> выводит окно на экран, а <code>XNextEvent</code> выбирает из очереди событие, которое выше было определено. При событии <code>Expose</code> в окне рисуется прямоугольник и выводится строка "Hello World!". При нажатии клавиши на клавиатуре программа завершает работу.
== Ссылки ==
* {{ref-en}} [https://web.archive.org/web/20090217235848/http://www.sbin.org/doc/Xlib/ Руководство по программированию с использованием библиотеки Xlib]
* {{ref-en}} [http://tronche.com/gui/x/xlib/function-index.html Список функций библиотеки Xlib]
* {{ref-en}} [http://www.rahul.net/kenton/bib.html Kenton Lee's pages on X Window and Motif] {{Wayback|url=http://www.rahul.net/kenton/bib.html |date=20130520013725 }}
* {{ref-en}} [http://tronche.com/gui/x/xlib-tutorial/ Учебник по Xlib]
* {{ref-en}} [https://web.archive.org/web/20071018025425/http://users.actcom.co.il/~choo/lupg/tutorials/xlib-programming/xlib-programming.html#create_window Подробный обучающий курс Xlib]
* {{ref-en}} [http://www.dis.uniroma1.it/%7eliberato/screensaver Использование Xlib для создания скринсейвера]
* {{ref-ru}} [https://web.archive.org/web/20111202230359/http://motif.opennet.ru/book3.html Xlib - интерфейс с X Window на языке C]
* {{ref-ru}} [https://web.archive.org/web/20100111040051/http://gazette.linux.ru.net/lg78/articles/rus-tougher.html Программирование с Xlib на C++] {{недоступная ссылка|число=14|месяц=05|год=2013|url=http://gazette.linux.ru.net/lg78/articles/rus-tougher.html}}
* {{ref-ru}} [http://dfe3300.karelia.ru/koi/posob/X/index.html Программирование в среде X Window на основе библиотеки Xlib]
{{
{{Инструментарии виджетов}}
[[Категория:X Window System]]
|