1. Install XLib
$sudo apt-get install libx11-dev
2.helloxlib.c
const char *strdraw = "hello world";
Window win;
GC gc;
//打开显示 没有指明打开哪个显示时使用环境变量中的DESPLAY
display = XOpenDisplay(NULL);
if( !display ){
DUMP_ERR("call XOpenDisplay(%s) fail/n", XDisplayName(NULL));
return 1;
}
//得到系统当前的屏幕 (如果使用虚拟屏幕的话 一般会有几个)
// get default screen
screennum = DefaultScreen(display);
//根据屏幕的大小决定窗口的大小
width = DisplayWidth(display,screennum)/4;
height = DisplayHeight(display,screennum)/4;
//创建窗口
// create window
win = XCreateSimpleWindow(display,
RootWindow(display,screennum),
0,0,width,height,3,
BlackPixel(display,screennum),
WhitePixel(display,screennum));
// 选择窗口关心的事件
// select event
XSelectInput(display,win,
ExposureMask|KeyPressMask
|ButtonPressMask|StructureNotifyMask);
// 创建GC(图形上下文)
// create gc
{
unsigned long valuemask = 0;
XGCValues values;
gc = XCreateGC(display,win,valuemask,&values);
}
// 映射窗口 只有map后窗口才会在屏幕上显示
// show window
XMapWindow(display,win);
// 进入事件循环
// event loop
while(1){
XEvent event;
XNextEvent(display,&event); // 读一个事件
switch(event.type){
case Expose: // expose window 显示事件
if( event.xexpose.count != 0) break;
XDrawString(display,win,gc,10,10,
strdraw,strlen(strdraw));
break;
// 按键事件
case ButtonPress:
case KeyPress:
XFreeGC(display,gc);
//XCloseWindow(win);
XCloseDisplay(display);
return 0;
default:
break;
}
}
}
Makefile