news 2026/11/4 1:09:49

libX11的介绍及常用API使用方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
libX11的介绍及常用API使用方法

主要内容

本章主要讲解libX11的API相关使用内容,主要是API的相关使用方法,以下API的讲解以libX11-1.13版本的API为主,不同版本的API会有所差异。详细的讲解可以参考Xorg用户指导手册和X11开发手册,本文主要介绍libX11以及常用的libx11的使用方法。

简介

libX11,可以叫做Xlib(C Language X Interface),是一种XClient端基于X协议的一种应用库。XClient和XServer需要基于X窗口系统协议(X Window Protocol)进行信息传递,Xlib就可以这种协议的实现,与之相关的还有libXCB,也是一种实现X协议的应用库。

头文件

头文件位置说明
<X11/Xlib.h>
<X11/X.h>
<X11/Xcms.h>
<X11/Xutil.h>
<X11/Xresource.h>
<X11/Xatom.h>
<X11/cursorfont.h>
<X11/keysymdef.h>
<X11/keysym.h>
<X11/Xlibint.h>
<X11/Xproto.h>
<X11/Xprotostr.h>
<X11/X10.h>

X11中的概念

X11中的结构体

XWindowAttributes

typedef struct { int x, y; /* location of window */ int width, height; /* width and height of window */ int border_width; /* border width of window */ int depth; /* depth of window */ Visual *visual; /* the associated visual structure */ Window root; /* root of screen containing window */ int class; /* InputOutput, InputOnly*/ int bit_gravity; /* one of the bit gravity values */ int win_gravity; /* one of the window gravity values */ int backing_store; /* NotUseful, WhenMapped, Always */ unsigned long backing_planes; /* planes to be preserved if possible */ unsigned long backing_pixel; /* value to be used when restoring planes */ Bool save_under; /* boolean, should bits under be saved? */ Colormap colormap; /* color map to be associated with window */ Bool map_installed; /* boolean, is color map currently installed*/ int map_state; /* IsUnmapped, IsUnviewable, IsViewable */ long all_event_masks; /* set of events all people have interest in*/ long your_event_mask; /* my event mask */ long do_not_propagate_mask; /* set of events that should not propagate */ Bool override_redirect; /* boolean value for override-redirect */ Screen *screen; /* back pointer to correct screen */ } XWindowAttributes

XVisualInfo

typedef struct { Visual *visual; VisualID visualid; int screen; unsigned int depth; int class; unsigned long red_mask; unsigned long green_mask; unsigned long blue_mask; int colormap_size; int bits_per_rgb; } XVisualInfo

XImage

typedef struct _XImage { int width, height; /* size of image */ int xoffset; /* number of pixels offset in X direction */ int format; /* XYBitmap, XYPixmap, ZPixmap */ char *data; /* pointer to image data */ int byte_order; /* data byte order, LSBFirst, MSBFirst */ int bitmap_unit; /* quant. of scanline 8, 16, 32 */ int bitmap_bit_order; /* LSBFirst, MSBFirst */ int bitmap_pad; /* 8, 16, 32 either XY or ZPixmap */ int depth; /* depth of image */ int bytes_per_line; /* accelerator to next scanline */ int bits_per_pixel; /* bits per pixel (ZPixmap) */ unsigned long red_mask; /* bits in z arrangement */ unsigned long green_mask; unsigned long blue_mask; XPointer obdata; /* hook for the object routines to hang on */ struct funcs { /* image manipulation routines */ struct _XImage *(*create_image)(); int (*destroy_image)(); unsigned long (*get_pixel)(); int (*put_pixel)(); struct _XImage *(*sub_image)(); int (*add_pixel)(); } f; } XImage

Display接口

XOpenDisplay

Display *XOpenDisplay(display_name) 功能: 打开display 参数: display_name:输入,为display的名称,当为NULL时就会使用环境变量DISPLAY中的值, 即hostname:number.screen_number,如:":0.0" 返回值: None

XCloseDisplay

XCloseDisplay(display) 功能: 打开display 参数: display:输入,打开的display 返回值: Display指针,失败返回NULL

XAllPlanes

unsigned long XAllPlanes( 功能: 获取一个所有位都为1的unsigned long值,只会在作为plane参数时使用。和宏定义AllPlanes作用相同 参数: 返回值: unsigned long

XBlackPixel

unsigned long XBlackPixel(display, screen_number); 功能: 获取屏幕的黑色像素的值和宏定义BlackPixel(display, screen_number)作用相同 参数: display:display编号 screen_number:screen编号 返回值: unsigned long类型的黑色像素的值

XWhitePixel

unsigned long XWhitePixel(display, screen_number) 功能: 获取屏幕的黑色像素的值和宏定义WhitePixel(display, screen_number)作用相同 参数: display:display编号 screen_number:screen编号 返回值: unsigned long类型的白色像素的值

XConnectionNumber

int XConnectionNumber(display); 功能: 连接display,和宏定义ConnectionNumber(display)作用相同 参数: display:display编号 返回值: 返回文件描述符,是一个连接的fd

XDefaultColormap

Colormap XDefaultColormap(display, screen_number) 功能: 获取默认的颜色映射,和宏定义DefaultColormap(display, screen_number)作用相同 参数: display:display编号 screen_number:screen编号 返回值: 返回Colormap ID

XDefaultDepth

int XDefaultDepth(display, screen_number) 功能: 获取默认的颜色映射,和宏定义DefaultDepth(display, screen_number)作用相同 参数: display:display编号 screen_number:screen编号 返回值: 返回int数值,是所有planes的个数

XListDepths

int *XListDepths(display, screen_number, count_return); 功能: 获取display中screen的depth的count 参数: display:display编号 screen_number:screen编号 count_return:depth的数量 返回值: 返回int数值数组,是所有depth的集合,需要使用XFree释放

XDefaultGC

GC XDefaultGC(display, screen_number) 功能: 获取display中screen的图形上下文 参数: display:display编号 screen_number:screen编号 返回值: 返回GC 图形上下文

XDefaultRootWindow

Window XDefaultRootWindow(display) 功能: 获取display中的root窗口,和宏DefaultRootWindow(display)作用相同 参数: display:display编号 返回值: 返回默认的root Window

XDefaultScreenOfDisplay

Screen *XDefaultScreenOfDisplay(display); 功能: 获取display中的root窗口,和宏DefaultScreenOfDisplay(display)作用相同 参数: display:display编号 返回值: 返回Screen

XScreenOfDisplay

Screen *XScreenOfDisplay(display, screen_number) 功能: 获取display中的root窗口,和宏ScreenOfDisplay(display)作用相同 参数: display:display编号 screen_number:screen编号 返回值: 返回display的screen_number的默认Screen

XDefaultScreen

int XDefaultScreen(display) 功能: 获取display中的root窗口,和宏DefaultScreen(display)作用相同 参数: display:Display指针 返回值: 返回display的默认Screen

XScreenOfDisplay

int XDefaultScreen(display,screen_number) 功能: 获取display中的root窗口,和宏DefaultScreen(display)作用相同 参数: display:Display指针 screen_number:screen 编号 返回值: 返回display的默认Screen指针

XDefaultScreenOfDisplay

int XDefaultScreen(display) 功能: 获取display中的root窗口,和宏DefaultScreen(display)作用相同 参数: display:Display指针 返回值: 返回display的默认Screen指针

XDefaultVisual

Visual *XDefaultVisual(display, screen_number) 功能: 获取display中display的y的screen_number的的Visual 窗口,和宏DefaultVisual(display, screen_number)作用相同 参数: display:display编号 screen_number:screen编号 返回值: 返回display的y的screen_number的默认Visual

XDisplayCells

int XDisplayCells(display, screen_number) 功能: 获取display中display的y的screen_number的的int, 和宏DisplayCells(display, screen_number)作用相同 参数: display:display编号 screen_number:screen编号 返回值: 返回display的y的screen_number的默认colormap的个数

XDisplayPlanes

int XDisplayPlanes(display, screen_number) 功能: 获取display中display的y的screen_number的的int, 和宏DisplayPlanes(display, screen_number)作用相同 参数: display:display编号 screen_number:screen编号 返回值: 返回display的y的screen_number的默认plans的个数,也就是depths

XDisplayString

char *XDisplayString(display); 功能: 获取display中传给 XOpenDisplay的字符串,如果传递的是NULL, 那么返回的就是DISPLAY的字符串 和宏DisplayString(display)作用相同 参数: display:display编号 返回值: 返回display的打开display时候传递的字符串

XExtendedMaxRequestSize

long XExtendedMaxRequestSize(display) 功能: 获取XServer的最大请求的size,以四字节为单位。 和宏ExtendedMaxRequestSize(display)作用相同 参数: display:display编号 返回值: long类型

XLastKnownRequestProcessed

unsigned long XLastKnownRequestProcessed(display); 功能: 获取xlib下发的最后请求的全序列号。 和宏LastKnownRequestProcessed(display)作用相同 参数: display:display编号 返回值: unsigned long类型

XNextRequest

unsigned long XNextRequest(display) 功能: 获取xlib下发的最后请求的全序列号。 和宏XNextRequest(display)作用相同 参数: display:display编号 返回值: unsigned long类型

XProtocolVersion

int XProtocolVersion(display) 功能: 获取xlib实现的协议主版本号。 和宏ProtocolVersion(display)作用相同 参数: display:display编号 返回值: int类型

XProtocolRevision

int XProtocolRevision(display) 功能: 获取xlib实现的协议revision版本号。 和宏ProtocolRevision(display)作用相同 参数: display:display编号 返回值: int类型

XQLength

int XQLength(display) 功能: 获取display的事件队列的长度,即当前display即将处理的事件个数 但是可能部分事件并没有入队列。 和宏QLength(display)作用相同 参数: display:display编号 返回值: int类型

XRootWindow

Window XRootWindow(display, screen_number) 功能: 获取display的screen的Root Window 和宏RootWindow(display, screen_number)作用相同 参数: display:display编号 screen_number:screen编号 返回值: Window类型

XScreenCount

int XScreenCount(display) 功能: 获取display的screen的数目 和宏ScreenCount(display)作用相同 参数: display:display编号 返回值: int 类型

XServerVendor

char *XServerVendor(display); 功能: 获取display的Vendor名称 和宏ServerVendor(display)作用相同 参数: display:display编号 返回值: char *类型

XVendorRelease

int XVendorRelease(display) 功能: 获取display的XServer的release发行版的的数字 和宏VendorRelease(display)作用相同 参数: display:display编号 返回值: int类型

Image相关接口

XListPixmapFormats

XPixmapFormatValues *XListPixmapFormats(display, count_return) 功能: 获取display的的Pixmap格式的数目和值 参数: display:display编号 count_return: pixmap的格式数目 typedef struct { int depth; int bits_per_pixel; int scanline_pad; } XPixmapFormatValues; 返回值: XPixmapFormatValues *类型,需要XFree进行释放。

XImageByteOrder

int XImageByteOrder(display); 功能: 获取display的的Image的字节顺序,LSB或者MSB 参数: display:display编号 返回值: int类型.

XBitmapUnit

int XBitmapUnit(display) 功能: 获取display的的bitmap的采样单位,以bit为单位。 参数: display:display编号 返回值: int类型

XBitmapBitOrder

int XBitmapBitOrder(display) 功能: 获取display的的bitmap的为顺序,LSB或者MSB 和宏BitmapBitOrder(display)作用相同 参数: display:display编号 返回值: int类型

XBitmapPad

int XBitmapPad(display) 功能: 每个采样线必须是采样位数的倍数,并返回此值 和宏BitmapPad(display)作用相同 参数: display:display编号 返回值: int类型

XDisplayHeight

int XDisplayHeight(display, screen_number) 功能: 获取display的screen的高度 和宏BitmapPad(display)作用相同 参数: display:display编号 screen_number:screen编号 返回值: int类型

XDisplayHeightMM

int XDisplayHeightMM(display, screen_number) 功能: 获取display的screen的高度,以毫米为单位 和宏DisplayHeightMM(display, screen_number)作用相同 参数: display:display编号 screen_number:screen编号 返回值: int类型

XDisplayWidth

int XDisplayWidth(display, screen_number) 功能: 获取display的screen的宽度 和宏DisplayWidth(display, screen_number)作用相同 参数: display:display编号 screen_number:screen编号 返回值: int类型

XDisplayWidthMM

int XDisplayWidthMM(display, screen_number) 功能: 获取display的screen的宽度,以毫米为单位 和宏DisplayWidthMM(display, screen_number)作用相同 参数: display:display编号 screen_number:screen编号 返回值: int类型

屏幕信息相关接口

XBlackPixelOfScreen

unsigned long XBlackPixelOfScreen(screen) 功能: 获取screen的黑色像素值 和宏BlackPixelOfScreen(display)作用相同 参数: screen:screen编号 返回值: unsigned long 类型

XWhitePixelOfScreen

unsigned long XWhitePixelOfScreen(screen) 功能: 获取screen的白色像素值 和宏WhitePixelOfScreen(display, screen_number)作用相同 参数: display:display编号 screen_number:screen编号 返回值: unsigned long类型

XCellsOfScreen

int XCellsOfScreen(screen) 功能: 获取screen的白色像素值 和宏CellsOfScreen(screen)作用相同 参数: screen:Screen结构体指针 返回值: int 类型

XDefaultColormapOfScreen

Colormap XDefaultColormapOfScreen(screen) 功能: 获取screen的colormap 和宏DefaultColormapOfScreen(screen)作用相同 参数: screen:Screen结构体指针 返回值: unsigned long类型

XDefaultDepthOfScreen

int XDefaultDepthOfScreen(screen) 功能: 获取screen的depth 和宏DefaultDepthOfScreen(screen)作用相同 参数: screen:Screen结构体指针 返回值: int 类型

XDefaultGCOfScreen

GC XDefaultGCOfScreen(screen) 功能: 获取screen的GC(图形上下文) 和宏DefaultGCOfScreen(screen)作用相同 参数: screen:Screen结构体指针 返回值: GC类型

XDefaultVisualOfScreen

Visual *XDefaultVisualOfScreen(screen) 功能: 获取screen的Visual 指针 和宏DefaultVisualOfScreen(screen)作用相同 参数: screen:Screen结构体指针 返回值: Visual *类型

XDoesBackingStore

int XDoesBackingStore(screen) 功能: 获取screen是否支持back store 和宏DoesBackingStore(screen)作用相同 参数: screen:Screen结构体指针 返回值: int类型,返回 WhenMapped, NotUseful, or Always

XDoesSaveUnders

Bool XDoesSaveUnders(screen) 功能: 获取screen是否支持save unders 和宏DoesSaveUnders(screen)作用相同 参数: screen:Screen结构体指针 返回值: GC类型

XDisplayOfScreen

Display *XDisplayOfScreen(screen) 功能: 获取screen的Display* 和宏DisplayOfScreen(screen)作用相同 参数: screen:Screen结构体指针 返回值: Display*类型

XScreenNumberOfScreen

long XScreenNumberOfScreen(screen) 功能: 获取screen的number 和宏ScreenNumberOfScreen(screen)作用相同 参数: screen:Screen结构体指针 返回值: long 类型

XEventMaskOfScreen

long XEventMaskOfScreen(screen) 功能: 获取rootwindow 中screen的事件掩码 和宏EventMaskOfScreen(screen)作用相同 参数: screen:Screen结构体指针 返回值: long 类型

XWidthOfScreen

int XWidthOfScreen(screen) 功能: 获取screen的width 和宏WidthOfScreen(screen)作用相同 参数: screen:Screen结构体指针 返回值: int类型

XHeightOfScreen

int XHeightOfScreen(screen) 功能: 获取screen的height 和宏HeightOfScreen(screen)作用相同 参数: screen:Screen结构体指针 返回值: int类型

XWidthMMOfScreen

int XWidthOfScreen(screen) 功能: 获取screen的width,以mm为单位 和宏WidthOfScreen(screen)作用相同 参数: screen:Screen结构体指针 返回值: int类型

XHeightMMOfScreen

int XHeightOfScreen(screen) 功能: 获取screen的height,以mm为单位 和宏HeightOfScreen(screen)作用相同 参数: screen:Screen结构体指针 返回值: int类型

XMaxCmapsOfScreen

int XMaxCmapsOfScreen(screen) 功能: 获取screen的不同colormap支持的最大数目 和宏EventMaskOfScreen(screen)作用相同 参数: screen:Screen结构体指针 返回值: int 类型

XMinCmapsOfScreen

int XMinCmapsOfScreen(screen) 功能: 获取screen的不同colormap支持的最小数目 和宏MinCmapsOfScreen(screen)作用相同 参数: screen:Screen结构体指针 返回值: int 类型

XPlanesOfScreen

int XPlanesOfScreen(screen) 功能: 获取root window的depth 和宏PlanesOfScreen(screen)作用相同 参数: screen:Screen结构体指针 返回值: int 类型

XRootWindowOfScreen

Window XRootWindowOfScreen(screen) 功能: 获取screen的root window 和宏RootWindowOfScreen(screen)作用相同 参数: screen:Screen结构体指针 返回值: Window 类型

Window相关接口

XCreateWindow

Window XCreateWindow(display, parent, x, y, width, height, border_width, depth, class, visual, valuemask, attributes) 功能: 创建一个未显示的window,并设置窗口属性 参数: display: 与XServer的连接句柄 parent: 父窗口 x,y,width,height:窗口的位置和大小 border_width:指定窗口的边界像素宽度 depth:指定window的深度 class:指定窗口类别,InputOutput, InputOnly, or CopyFromParent visual: visual type,CopyFromParent代表继承父窗口的visual type valuemask:指定window属性设置的掩码,确定设置属性的类别 attributes:window属性 返回值: Window 类型,或者BadAlloc, BadColor, BadCursor, BadMatch, BadPixmap, BadValue, and BadWindow错误饭返回值

XCreateSimpleWindow

Window XCreateSimpleWindow(display, parent, x, y, width, height, border_width, border, background) 功能: 创建一个未显示的window,并设置窗口属性 参数: display: 与XServer的连接句柄 parent: 父窗口 x,y,width,height:窗口的位置和大小 border_width:指定窗口的边界像素宽度 border:指定边缘像素的颜色值 background:指定window的背景 返回值: Window 类型,或者BadAlloc, BadColor, BadCursor, BadMatch, BadPixmap, BadValue, and BadWindow错误饭返回值

XDestroyWindow

XDestroyWindow(display, w) 功能: 销毁一个未显示的window 参数: display: 与XServer的连接句柄 w: 窗口 返回值: None

XDestroySubwindows

XDestroySubwindows(display, w) 功能: 销毁一个未显示的window所有子窗口 参数: display: 与XServer的连接句柄 w: 窗口 返回值: None

XMapWindow

XMapWindow(display, w) 功能: 显示window 参数: display: 与XServer的连接句柄 w: 窗口 返回值: None

XMapSubwindows

XMapSubwindows(display, w) 功能: 显示window的所有子窗口 参数: display: 与XServer的连接句柄 w: 窗口 返回值: None

XUnmapWindow

XUnmapWindow(display, w) 功能: 隐藏window 参数: display: 与XServer的连接句柄 w: 窗口 返回值: None

XUnmapSubwindows

XUnmapSubwindows(display, w) 功能: 隐藏window 参数: display: 与XServer的连接句柄 w: 窗口 返回值: None

XConfigureWindow

XConfigureWindow(display, w, value_mask, values) 功能: 配置window 参数: display: 与XServer的连接句柄 w: 窗口 valuemask:指定window属性设置的掩码,确定设置属性的类别 values:属性值 返回值: None

XMoveWindow

XMoveWindow(display, w, x, y) 功能: 移动window到(x,y)坐标 参数: display: 与XServer的连接句柄 w: 窗口 返回值: None,或者 BadWindow错误

XResizeWindow

XResizeWindow(display, w, width, height) 功能: resize window的尺寸 参数: display: 与XServer的连接句柄 w: 窗口 width,height:窗口尺寸 返回值: None,或者 BadWindow错误

XMoveResizeWindow

XMoveResizeWindow(display, w, x, y, width, height) 功能: resize window的尺寸并移动位置 参数: display: 与XServer的连接句柄 w: 窗口 x,y:窗口位置 width,height:窗口尺寸 返回值: None,或者 BadWindow错误

XSetWindowBorderWidth

XSetWindowBorderWidth(display, w, width) 功能: 设置window的边界像素宽度 参数: display: 与XServer的连接句柄 w: 窗口 height:窗口边界像素宽度 返回值: None,或者 BadWindow错误

Window Stack相关接口

XRaiseWindow

XRaiseWindow(display, w) 功能: 将window提升到栈顶端,即窗口设置到最高层,不会有其他窗口遮挡 参数: display: 与XServer的连接句柄 w: 窗口 height:窗口边界像素宽度 返回值: None,或者 BadWindow错误

XLowerWindow

XLowerWindow(display, w) 功能: 将window提升到栈底部,即窗口设置到最低层,不会遮挡其他窗口 参数: display: 与XServer的连接句柄 w: 窗口 height:窗口边界像素宽度 返回值: None,或者 BadWindow错误

XRestackWindows

XRestackWindows(display, windows[], nwindows) 功能: 将window按照顺序重新入栈 参数: display: 与XServer的连接句柄 windows: 窗口数组,多个窗口 nwindows:窗口数目 返回值: None,或者 BadMatch错误

Window配置相关接口

XChangeWindowAttributes

XChangeWindowAttributes(display, w, valuemask, attributes) 功能: 改变窗口属性 参数: display: 与XServer的连接句柄 w: 窗口 valuemask:指定window属性设置的掩码,确定设置属性的类别 attributes:属性值 返回值: None,或者 BadMatch错误

XSetWindowBackground

XSetWindowBackground(display, w, background_pixel) 功能: 改变窗口背景颜色 参数: display: 与XServer的连接句柄 w: 窗口 background_pixel:背景像素颜色值 返回值: None,或者 BadMatch错误

XSetWindowBackgroundPixmap

XSetWindowBackgroundPixmap(display, w, background_pixmap); 功能: 设置pixmap为背景 参数: display: 与XServer的连接句柄 w: 窗口 background_pixmap:背景pixmap 返回值: None,或者 BadMatch错误

XSetWindowBorder

XSetWindowBorder(display, w, border_pixel) 功能: 设置pixmap为背景 参数: display: 与XServer的连接句柄 w: 窗口 border_pixel:边框像素颜色 返回值: None,或者 BadMatch错误

XSetWindowBorderPixmap

XSetWindowBorderPixmap(display, w, border_pixmap) 功能: 设置pixmap为边框 参数: display: 与XServer的连接句柄 w: 窗口 border_pixmap:边框pixmap 返回值: None,或者 BadMatch错误

XSetWindowColormap

XSetWindowColormap(display, w, colormap) 功能: 设置窗口的颜色映射 参数: display: 与XServer的连接句柄 w: 窗口 colormap:颜色映射 返回值: None,或者 BadMatch错误

XGetWindowAttributes

Status XGetWindowAttributes(display, w, window_attributes_return) 功能: 获取窗口属性 参数: display: 与XServer的连接句柄 w: 窗口 window_attributes_return:获取的属性值 返回值: None,或者 BadMatch错误

XGetGeometry

Status XGetGeometry(display, d, root_return, x_return, y_return, width_return, height_return, border_width_return, depth_return) 功能: 获取窗口属性 参数: display: 与XServer的连接句柄 d: drawable,指定可绘制区域 root_return:返回的root window x_return,y_return,width_return,height_return:返回的root window的区域 depth_return:获取drawable的深度 返回值: None,或者 BadMatch错误

Pixmap and Cursor相关接口

XCreatePixmap

Pixmap XCreatePixmap(display, d, width, height, depth); 功能: 创建screen的pixmap 参数: display: 与XServer的连接句柄 d: 需要创建pixmap的screen width, height:pixmap的size depth:pixmap的深度 返回值: None,或者 BadMatch错误

XFreePixmap

XFreePixmap(display, pixmap) 功能: 获取窗口属性 参数: display: 与XServer的连接句柄 pixmap: 已经创建的pixmap 返回值: None,或者 BadMatch错误

Color Management相关接口

Graphics Context and State Manipulating相关接口

Graphics Functions相关接口

XPutImage

XPutImage(display, d, gc, image, src_x, src_y, dest_x, dest_y, width, height) 功能: 将client的Ximage传输到server上 参数: display: 与XServer的连接句柄 d: drawable画布 image:Ximage src_x, src_y, dest_x, dest_y:源rect到目标rect width,height:图像的分辨率 返回值: None,或者 BadMatch错误

Window and Session Manager相关接口

Event Handling相关接口

Xserver的Event结构体,不同的事件掩码对应于不同的事件的结构体

typedef union _XEvent { int type; XAnyEvent xany; XKeyEvent xkey; XButtonEvent xbutton; XMotionEvent xmotion; XCrossingEvent xcrossing; XFocusChangeEvent xfocus; XExposeEvent xexpose; XGraphicsExposeEvent xgraphicsexpose; XNoExposeEvent xnoexpose; XVisibilityEvent xvisibility; XCreateWindowEvent xcreatewindow; XDestroyWindowEvent xdestroywindow; XUnmapEvent xunmap; XMapEvent xmap; XMapRequestEvent xmaprequest; XReparentEvent xreparent; XConfigureEvent xconfigure; XGravityEvent xgravity; XResizeRequestEvent xresizerequest; XConfigureRequestEvent xconfigurerequest; XCirculateEvent xcirculate; XCirculateRequestEvent xcirculaterequest; XPropertyEvent xproperty; XSelectionClearEvent xselectionclear; XSelectionRequestEvent xselectionrequest; XSelectionEvent xselection; XColormapEvent xcolormap; XClientMessageEvent xclient; XMappingEvent xmapping; XErrorEvent xerror; XKeymapEvent xkeymap; long pad[24]; } XEvent;
XSelectInput(display, w, event_mask) 功能: 获取窗口属性 参数: display: 与XServer的连接句柄 event_mask: 时间掩码, 返回值: None,或者 BadMatch错误

Input Device相关接口

Locales and Internationalized Text相关接口

Resource Manager相关接口

Application Utility相关接口

XCreateImage

XImage *XCreateImage(display, visual, depth, format, offset, data,width, height, bitmap_pad, bytes_per_line) 功能: 创建一个XImage 参数: display: 与XServer的连接句柄 visual:获取默认visual使用宏DefaultVisual(display, screen_number) width,height: 图像数据的分辨率 format:XYBitmap, XYPixmap, or ZPixmap三种 offset:data的起始偏移量 bitmap_pad:图像的pad间隔,8,16,32 bytes_per_line:图像的stride 返回值: None,或者 BadWindow错误

XDestroyImage

XDestroyImage(ximage) 功能: 销毁一个XImage 参数: ximage:XCreateImage创建的Ximage 返回值: None

Input Device相关接口

相关术语

实例

#include <X11/Xlib.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <png.h> #include <X11/Xutil.h> #include <X11/Xatom.h> Window create_simple_window(Display* display, int width, int height, int x, int y) { int screen_num = DefaultScreen(display); int win_border_width = 2; Window win; win = XCreateSimpleWindow(display, RootWindow(display, screen_num), x, y, width, height, win_border_width, BlackPixel(display, screen_num), WhitePixel(display, screen_num)); /* make the window actually appear on the screen. */ XMapWindow(display, win); /* flush all pending requests to the X server. */ XFlush(display); return win; } GC create_gc(Display* display, Window win, int reverse_video) { GC gc; /* handle of newly created GC. */ unsigned long valuemask = 0; /* which values in 'values' to */ /* check when creating the GC. */ XGCValues values; /* initial values for the GC. */ unsigned int line_width = 2; /* line width for the GC. */ int line_style = LineSolid; /* style for lines drawing and */ int cap_style = CapButt; /* style of the line's edje and */ int join_style = JoinBevel; /* joined lines. */ int screen_num = DefaultScreen(display); gc = XCreateGC(display, win, valuemask, &values); if (gc < 0) { fprintf(stderr, "XCreateGC: \n"); } /* allocate foreground and background colors for this GC. */ if (reverse_video) { XSetForeground(display, gc, WhitePixel(display, screen_num)); XSetBackground(display, gc, BlackPixel(display, screen_num)); } else { XSetForeground(display, gc, BlackPixel(display, screen_num)); XSetBackground(display, gc, WhitePixel(display, screen_num)); } XSetLineAttributes(display, gc, line_width, line_style, cap_style, join_style); XSetFillStyle(display, gc, FillSolid); return gc; } //加载file到data中 void LoadPng (FILE *file, unsigned char** data, char **clipData, unsigned int *width, unsigned int *height, unsigned int *rowbytes); void main(int argc, char* argv[]) { Display* display; int screen_num; Window win; unsigned int display_width, display_height; unsigned int width, height; char *display_name = getenv("DISPLAY"); GC gc; /* in our window. */ unsigned width_ = 0, height_ = 0; unsigned char *data = NULL; char *clip = NULL; unsigned rowbytes = 0; unsigned long *image, *mask; /* open connection with the X server. */ display = XOpenDisplay(display_name); if (display == NULL) { fprintf(stderr, "%s: cannot connect to X server '%s'\n", argv[0], display_name); exit(1); } /* get the geometry of the default screen for our display. */ screen_num = DefaultScreen(display); display_width = DisplayWidth(display, screen_num); display_height = DisplayHeight(display, screen_num); /* make the new window occupy 1/9 of the screen's size. */ width = (display_width / 3); height = (display_height / 3); printf("window width - '%d'; height - '%d'\n", width, height); win = create_simple_window(display, width, height, 0, 0); gc = create_gc(display, win, 0); XSync(display, False); /* catch expose events */ XSelectInput(display, win, ExposureMask); /* wait for the expose event */ XEvent ev; XNextEvent(display, &ev); // Load image FILE *file = fopen ("./timg.png", "r"); if (!file) return; LoadPng (file, &data, &clip, &width_, &height_, &rowbytes); if (!data) return; XImage *ximage = XCreateImage (display, DefaultVisual (display, DefaultScreen (display)), DefaultDepth(display, DefaultScreen (display)), ZPixmap, 0, (char*)data, width_, height_, 8, rowbytes); if (ximage) { XPutImage (display, win, gc, ximage, 0, 0, 0, 0, width_, height_); } else { free (data); } while(1) { XNextEvent(display, &ev); if ( ev.type == Expose) { XPutImage (display, win, gc, ximage, 0, 0, 0, 0, width_, height_); XFlush(display); } } free (clip); XFlush(display); XSync(display, False); XCloseDisplay(display); }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/4 1:08:37

ESP32离线语音控制实战:SU-03T串口通信与MicroPython指令映射

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/4 1:08:37

嵌入式内存管理实战:从malloc、free到RTOS内存泄漏与测试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/4 1:08:35

中文日期解析实战:从星期校验到日历提醒的完整工具链

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/4 1:06:48

STM32平衡车代码从标准库到HAL库移植实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/4 1:04:41

MQTT物联网实战:从协议原理到EMQX生产部署与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/4 1:04:30

EtherCAT背板方案:高速高精工业自动化通信的工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华