Xlib

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;
}

注釋
外部連結

评论 (0)

  • 还没有评论,来抢沙发吧。