X11学习(一)基本窗口的建立
http://mech.math.msu.su/~vvb/2course/Borisenko/CppProjects/GWindow/xintro.html.
简介
X11是什么
X提供了GUI一个在unix系统下基本框架,可以绘图,移动窗口,显示窗口,与鼠标键盘一系列的交互。当前X已经更新到第11版所以简称为X11协议。与其类似的可以参考Wayland
窗口的初始化
XOpenDisplay
func:Display *XOpenDisplay(char *display_name);
作用:打开指定X的服务器,返回一个关于服务器的display结构体。参数传入为NULL则是本机环境,如果是局域网地址则可以通过:来隔开,hostname:number.screen_number
例子:
1
2Display *display = XOpenDisplay(NULL); //本机环境
XOpenDisplay("192.168.0.12:0"); //局域网XCreateSimpleWindow
func: Window XCreateWindow(display, parent, x, y, width, height, border_width, depth, class, visual, valuemask, attributes)
作用:创建一个简单窗口并返回一个窗口句柄
例子:
1
Windows win = XCreateSimpleWindow(dpy, root, 0, 0, width, height, 0, 0, 0xFFFF7700);//窗口创建
XSelectInput
func: int XSelectInput(Display *display, Window w, long event_mask);
作用: 选择窗口所需要监听的事件,第三个参数就是传入事件。否则X就不监听窗口的任何事件。
例子:
1
XSelectInput(xfc->display, xfc->window, KeyPressMask);
XMapWindow
func: XMapWindow(Display *display, Window w);
作用: 关联并映射子窗口让其能同步获取事件和显示。
例子:
1
XMapWindow(xfc->display, xfc->window); //关联窗口并显示
窗口事件处理
XNextEvent
func: XNextEvent(Display *display, XEvent)
作用: 从事件队列获取下一个事件,如果队列为空则刷新缓存直到获取下一个事件。
例子:
1
2
3XEvent event = {0}; //X的事件
XNextEvent(xfc->display, &event);//拉取窗口事件
printf("event:%d\n",event.type);
简单窗口的创建
main.c:
1 |
|