Xlib

维基百科,自由的百科全书
跳转到导航 跳转到搜索
Xlib
开发者X.Org基金会
首次发布大约1985年
当前版本
    Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
    源代码库
    • {{URL|example.com|可选的显示文本}}
    Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
    编程语言C
    引擎
      Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
      类型
      许可协议
        Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
        网站www.x.org, 文档: www.x.org/releases/current/doc/libX11/libX11/libX11.html

        Xlib是一种X Window System协议的客户端,以C语言撰写。其功能是与X server沟通。这样的功能可以让程序人员撰写程序时,毋须了解其协议的细节。但甚少应用程序会直接使用Xlib;通常是透过其他的函数库来调用Xlib用以提供部件工具箱(widget toolkits):

        File:Xlib and XCB in the X Window System graphics stack.svg
        Xlib及其应用

        Xlib发表于1985年,目前使用在许多的Unix-like操作系统上。

        目前XCB有可能取代Xlib.

        资料类型[编辑]

        Xlib主要的资料类型是Display[1]结构。

        示例[编辑]

        下面是一个XLib的范列,产生一个视窗。

        /*
          Simple Xlib application drawing a box in a window.
          gcc input.c -o output -lX11
        */
        
        #include <X11/Xlib.h>
        #include <stdio.h>
        #include <stdlib.h>
        #include <string.h>
        #include <stdbool.h>
        
        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;
        }
        

        注释[编辑]

        1. ^ Display Structure on freedesktop CVS. Tip search for: typedef struct _XDisplay Display. [2009-07-09]. (原始内容存档于2008-01-31). 

        外部链接[编辑]