Xlib是一種X Window System協定的用戶端,以C語言撰寫。其功能是與X server溝通。這樣的功能可以讓程式人員撰寫程式時,毋須了解其協定的細節。但甚少應用程式會直接使用Xlib;通常是透過其他的函式庫來呼叫Xlib用以提供部件工具箱(widget toolkits):
- Intrinsics(Xt)
- Xaw(Xaw)
- Motif
- GTK+
- Qt(X11 version)
- Tk
Xlib發表於1985年,目前使用在許多的Unix-like作業系統上。
目前XCB有可能取代Xlib.
資料型別
Xlib主要的資料型別是Display結構。
範例
下面是一個XLib的範列,產生一個視窗。
/*
Simple Xlib application drawing a box in a window.
gcc input.c -o output -lX11
*/
#include
#include
#include
#include
#include
int main(void)
{
Display *d;
Window w;
XEvent e;
char *msg = "Hello, World!";
int s;
bool done = false;
/ open connection with the server /
d = XOpenDisplay(NULL);
if (d == NULL) {
fprintf(stderr, "Cannot open display\n");
exit(1);
}
s = DefaultScreen(d);
/ create window /
w = XCreateSimpleWindow(d, RootWindow(d, s), 10, 10, 640, 480, 0,
BlackPixel(d, s), WhitePixel(d, s));
/ register interest in the delete window message /
Atom wmDeleteMessage = XInternAtom(d, "WM_DELETE_WINDOW", False);
XSetWMProtocols(d, w, &wmDeleteMessage, 1);
/ select kind of events we are interested in /
XSelectInput(d, w, ExposureMask | KeyPressMask | StructureNotifyMask);
/ map (show) the window /
XMapWindow(d, w);
/ event loop /
while (!done) {
XNextEvent(d, &e);
/ draw or redraw the window /
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));
}
/ exit on key press /
switch(e.type){
case KeyPress:
XDestroyWindow(d, w);
break;
case DestroyNotify:
done = true;
break;
case ClientMessage:
if (e.xclient.data.l[0] == wmDeleteMessage){
done = true;
}
break;
}
}
/ close connection to server /
XCloseDisplay(d);
return 0;
}
注釋
外部連結
- [https://web.archive.org/web/20090217235848/http://www.sbin.org/doc/Xlib/ Xlib Programming Manual]
- [http://tronche.com/gui/x/xlib/function-index.html Manual pages for all Xlib functions]
- [http://www.rahul.net/kenton/bib.html Kenton Lee's pages on X Window and Motif]
- [http://tronche.com/gui/x/xlib-tutorial/ A short tutorial on Xlib]
- [https://web.archive.org/web/20071018025425/http://users.actcom.co.il/~choo/lupg/tutorials/xlib-programming/xlib-programming.html#create_window#create_window A longer tutorial on Xlib]
- [http://www.dis.uniroma1.it/%7eliberato/screensaver Using Xlib for creating a screensaver module]
- [https://web.archive.org/web/20090308084753/http://www.init0.nl/simplex11tk.php Simple X11 toolkit for learning Xlib]
评论 (0)