主要内容
本章主要讲解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 */ } XWindowAttributesXVisualInfo
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; } XVisualInfoXImage
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; } XImageDisplay接口
XOpenDisplay
Display *XOpenDisplay(display_name) 功能: 打开display 参数: display_name:输入,为display的名称,当为NULL时就会使用环境变量DISPLAY中的值, 即hostname:number.screen_number,如:":0.0" 返回值: NoneXCloseDisplay
XCloseDisplay(display) 功能: 打开display 参数: display:输入,打开的display 返回值: Display指针,失败返回NULLXAllPlanes
unsigned long XAllPlanes( 功能: 获取一个所有位都为1的unsigned long值,只会在作为plane参数时使用。和宏定义AllPlanes作用相同 参数: 返回值: unsigned longXBlackPixel
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编号 返回值: 返回文件描述符,是一个连接的fdXDefaultColormap
Colormap XDefaultColormap(display, screen_number) 功能: 获取默认的颜色映射,和宏定义DefaultColormap(display, screen_number)作用相同 参数: display:display编号 screen_number:screen编号 返回值: 返回Colormap IDXDefaultDepth
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 WindowXDefaultScreenOfDisplay
Screen *XDefaultScreenOfDisplay(display); 功能: 获取display中的root窗口,和宏DefaultScreenOfDisplay(display)作用相同 参数: display:display编号 返回值: 返回ScreenXScreenOfDisplay
Screen *XScreenOfDisplay(display, screen_number) 功能: 获取display中的root窗口,和宏ScreenOfDisplay(display)作用相同 参数: display:display编号 screen_number:screen编号 返回值: 返回display的screen_number的默认ScreenXDefaultScreen
int XDefaultScreen(display) 功能: 获取display中的root窗口,和宏DefaultScreen(display)作用相同 参数: display:Display指针 返回值: 返回display的默认ScreenXScreenOfDisplay
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的默认VisualXDisplayCells
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的个数,也就是depthsXDisplayString
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 AlwaysXDoesSaveUnders
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: 窗口 返回值: NoneXDestroySubwindows
XDestroySubwindows(display, w) 功能: 销毁一个未显示的window所有子窗口 参数: display: 与XServer的连接句柄 w: 窗口 返回值: NoneXMapWindow
XMapWindow(display, w) 功能: 显示window 参数: display: 与XServer的连接句柄 w: 窗口 返回值: NoneXMapSubwindows
XMapSubwindows(display, w) 功能: 显示window的所有子窗口 参数: display: 与XServer的连接句柄 w: 窗口 返回值: NoneXUnmapWindow
XUnmapWindow(display, w) 功能: 隐藏window 参数: display: 与XServer的连接句柄 w: 窗口 返回值: NoneXUnmapSubwindows
XUnmapSubwindows(display, w) 功能: 隐藏window 参数: display: 与XServer的连接句柄 w: 窗口 返回值: NoneXConfigureWindow
XConfigureWindow(display, w, value_mask, values) 功能: 配置window 参数: display: 与XServer的连接句柄 w: 窗口 valuemask:指定window属性设置的掩码,确定设置属性的类别 values:属性值 返回值: NoneXMoveWindow
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 返回值: NoneInput 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); }