一个与linux下使用Xlib进行窗口编程的小例子,作为一个刚开始了解Xlib的初学者,应该从一个小例子开始,从编译,运行,再到逐步深入...,根据X11协议原理,其实我们所编写的程序都是Xclient程序,Xserver负责接收硬件事件,Xclient负责计算,结果会反馈给Xserver,Xserver来负责与硬件沟通,例如显示Xclient绘制的图形到显示器.

具体编译:gcc x11.c -o output -I/usr/X11R6/include -L/usr/X11R6/lib -lX11

源码如下:

      
        /*
        * 下边是编译命令
        * gcc x11.c -o output -I/usr/X11R6/include -L/usr/X11R6/lib -lX11
        */
        
        #include <X11/Xlib.h>
        #include <stdio.h>
        #include <stdlib.h>
        #include <string.h>
        
        int main(void)
        {
        Display *display;
        Window window;
        XEvent event;
        char *msg = "你好 ,这是一个测试窗口!";
        int s;
        
        /* 与Xserver建立连接 */
        display = XOpenDisplay(NULL);
        if (display == NULL)
        {
        fprintf(stderr, "Cannot open display\n");
        exit(1);
        }
        
 	
        s = DefaultScreen(display);
        
        /* 创建一个窗口 */
        window = XCreateSimpleWindow(display, RootWindow(display, s), 10, 10, 200, 200, 1,
        BlackPixel(display, s), WhitePixel(display, s));
        
        /* 选择一种感兴趣的事件进行监听 */
        XSelectInput(display, window, ExposureMask | KeyPressMask);
        
        /* 显示窗口 */
        XMapWindow(display, window);
        
        /* 事件遍历 */
        for (;;)
        {
        XNextEvent(display, &event);
        
        /* 绘制窗口或者重新绘制 */
        if (event.type == Expose)
        {
        XFillRectangle(display, window, DefaultGC(display, s), 20, 20, 10, 10);
        XDrawString(display, window, DefaultGC(display, s), 50, 50, msg, strlen(msg));
        }
        /* 当检测到键盘按键,退出消息循环 */
        if (event.type == KeyPress)
        break;
        }
        
        /* 关闭与Xserver服务器的连接 */
        XCloseDisplay(display);
        
        return 0;
        }
      
    
以上。