linux下 X11桌面 一個C語言調用Xlib創建窗口的小列子

一個與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;
 }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章