本文主要是介绍X11 入门,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
x11 作为gui显示的河床,温生不知多少gui的框架。
这个基础参考是 开源中国的文章 《X11 入门练习》的源码,我将表述转换了下。
源码在我放在gitee 项目中 src 目录下 simple_window.c 文件中。
-
引入 xlib 头文件
#include<X11/Xlib.h>
-
链接 x server
Display * dsp = XOpenDisplay(NULL);if (!dsp) {return 1;}
-
创建窗口
Window win = XCreateSimpleWindow(dsp,DefaultRootWindow(dsp),50,dic 50, // origin200, 200, // size0, black, // borderwhite); // backgd
-
将内存窗口数据拷贝到显卡存储中
XMapWindow(dsp, win);
-
XSelectInput 设置消息监听类型, 这里设置为 StructureNotifyMask - 通知接收事件通知
StructureNotifyMask 在 X.h 文件中 168行 定义,这里前后有相关的其他宏定义。long eventMask = StructureNotifyMask;XSelectInput(dsp, win, eventMask);
-
然后等待server的 map 完成的通知
XEvent evt;do {XNextEvent(dsp, & evt); // calls XFlush()} while (evt.type != MapNotify);
-
由于画图需要很多参数,xlib 提供了 画图的一个结构体,很多参数都有默认值,不用每次作图都设置各种参数。
GC gc = XCreateGC(dsp, win, 0, NULL );XSetForeground( dsp, gc, black );
-
XDrawLine画一条 (x1, y1)到(x2, y2) 的直线。该样例中画一条 (10,10) 到 (190,190) 的直线。
XDrawLine(dsp, win, gc, 10, 10, 190, 190);
-
通知接受设置鼠标事件
eventMask = ButtonPressMask | ButtonReleaseMask;XSelectInput(dsp, win, eventMask); // override prev
-
接受鼠标事件消息
do {XNextEvent(dsp, & evt); // calls XFlush()} while (evt.type != ButtonRelease);
-
释放窗口和关闭到x server 的链接
XDestroyWindow(dsp, win);XCloseDisplay(dsp);
可以用这个例子来熟悉下我们界面显示的过程和一个窗口应用的底层建立过程。
想起那句朴实无华且枯燥,大致就是说的x11吧,哈哈。
这篇关于X11 入门的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!