从0开始写android 之xwindow
模拟实现android的窗口系统本质上还是在ubuntu 上实现自己的窗口系统, xwindow是一套成熟的解决方案。在ubuntu上使用xwindow的好处之一 是ubuntu自带xwindow的库, 直接引用头文件和库文件。下面来了解下 xwindow的基本函数接口。
参考 https://tronche.com/gui/x/xlib/
-
简介
Xwindow system 是MIT设计的一个网络透明的窗口系统。Xlib是一个c 程序库。
-
显示函数
- 打开显示器
函数: Display *XOpenDisplay( char *display_name )
参数: display_name 指定硬件显示名称。 该名称确定显示和要使用的通信域。如果display_name 为null, 则它默认为 display 环境变量的值。如果display_name是以下格式的字符串 :hostname:number.screen_number
表示主机名的第几个屏幕。
返回值: Display 结构, 该结构在 X11/Xlib.h 中定义。 如果XOpenDisplay ()未成功,返回NULL.
- 获取有关显示 ,图像格式 或屏幕的信息
应用程序不应该直接修改Display 和Screen 结构的任何部分。 成员应被视为只读。
函数: Window XDefaultRootWindow(Display display)
函数功能: 显示指定与 X 服务器的连接。返回默认屏幕的根窗口。 看过android系统的同学对 这个函数是不是有种似曾相识的感觉。很像android里的 RootWindowContainer.
函数: Screen *XDefaultScreenOfDisplay(Display display)
函数功能:显示指定与x服务器的连接。 返回指向默认屏幕的指针。
函数:XCloseDisplay()
函数功能: 关闭或断开与 x服务器的连接。
-
窗口函数
在 xwindow 系统中,窗口是屏幕上的矩形区域。可让你查看图形输出。
- 创建windows
函数: Window XCreateWindwo(Display *display,
Window parent,
int x, y,
unsigned int width, height,
unsigned int border_width,
int depth,
unsigned int class,
Visual *visual,
unsigned long valuemask,
XSetWindowAttributes *attributes
)
Window XCreateSimpleWindow(
Display *display,
Window parent,
int x, y,
unsigned int width, height,
unsigned int border_width,
unsigned long border,
unsigned long background
)
参数: Display 指定与 X 服务器的连接.
Window 指定父窗口
x,y 指定x和y 坐标
Width, height 指定宽度和高度。他们是创建的窗口的内部尺寸.
Border_Width 创建的窗口边框的宽度。
Border 窗口的边框像素值
Background 窗口的背景 像素值
Depth 指定窗口的深度
Class 创建的窗口的类
Visual 指定视觉对象类型
Valuemask
XSetWindowAttributes
typedef struct {
Pixmap background_pixmap; /* background, None, or ParentRelative */
unsigned long background_pixel; /* background pixel */
Pixmap border_pixmap; /* border of the window or CopyFromParent */
unsigned long border_pixel; /* border pixel value */
int bit_gravity; /* one of 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 use in restoring planes */
Bool save_under; /* should bits under be saved? (popups) */
long event_mask; /* set of events that should be saved */
long do_not_propagate_mask; /* set of events that should not propagate */
Bool override_redirect; /* boolean value for override_redirect */
Colormap colormap; /* color map to be associated with window */
Cursor cursor; /* cursor to be displayed (or None) */
} XSetWindowAttributes;
- 销毁windows
XDestroyWindow()
XDestorySubWindows()
- 配置windows
配置窗口大小,位置,堆叠,或边框 使用 XConfigureWindow()
移动窗口 XMoveWindow()
更改窗口大小 XResizeWindow()
升高窗口 XRaiseWindow()
降低窗口 XLowerWindow()
- 修改 window属性
XChangeWindowAttributes()
-
窗口信息函数
- 获取窗口信息
XGetWindowAttributes()
- 图像和光标函数
XCreatePixmap()
XFreePixmap()
- 色彩管理函数
- 颜色结构
typedef struct {
unsigned long pixel; /* pixel value */
unsigned short red, green, blue; /* rgb values */
char flags; /* DoRed, DoGreen, DoBlue */
char pad;
} XColor;
XCreateColormap()
XFreeColormap()
七.图形上下文函数
XCreateGC
-
图形函数
绘制单点和多点
XDrawPoint()
XDrawPoints()
XDrawLine()
XDrawLines()
XDrawSegments()
XDrawRectangle()
XDrawRectangles()
XDrawArc()
XDrawArcs()
XFillRectangle()
XFillRectangles()
XFillPolygon()
XFillArc()
XFillArcs()
XDrawText()
XDrawText16()
XDrawString()
XDrawString16()
XDrawImageString()
XDrawImageString16()
所有图像处理函数都使用 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;
初始化图像结构 XInitImage()
将 图片与显示屏上的可绘制对象矩形合并 XPutImage()
返回给定可绘制对象中的矩形的内容 XGetImage()
复制矩形的内容 XGetSubImage()
-
窗口和会话管理器功能
-
事件
-
资源管理
-
应用程序实用程序函数
用一个简单的例子来看下 xlib 的效果, gcc awindow.c -o awindow -lX11.
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <stdio.h>
#include <stdlib.h>int createXWindow( ){Display *display;int screen;Window win;XEvent event;display = XOpenDisplay(NULL);if(display == NULL){printf("Cannot open display\n");exit(1);}screen = XDefaultScreen(display);win = XCreateSimpleWindow(display,RootWindow(display, screen),10,10,200,200,1,BlackPixel(display, screen),WhitePixel(display, screen));XWMHints hints;hints.input = True;hints.flags = InputHint;XSetWMHints(display, win, &hints);XSizeHints *size_hints = XAllocSizeHints();size_hints->flags = PMinSize | PMaxSize | PSize;size_hints->min_width = 600;size_hints->max_width = 600;size_hints->min_height = 800;size_hints->max_height = 800;XSetNormalHints(display, win, size_hints);XSetWMSizeHints(display,win , size_hints, PSize | PMinSize | PMaxSize);XMapWindow(display, win);XSelectInput(display, win, ExposureMask | KeyPressMask);while(1){XNextEvent(display, &event);/* draw or redraw the window */if(event.type == Expose){XDrawRectangle(display, win, DefaultGC(display, screen), 10, 10, 100, 100);}/* exit on key press */if(event.type == KeyPress)break;}XCloseDisplay(display);return 0;
}
void main(){createXWindow();
}
./awindow 会画出一个 带矩形框的窗口。

相关文章:
从0开始写android 之xwindow
模拟实现android的窗口系统本质上还是在ubuntu 上实现自己的窗口系统, xwindow是一套成熟的解决方案。在ubuntu上使用xwindow的好处之一 是ubuntu自带xwindow的库, 直接引用头文件和库文件。下面来了解下 xwindow的基本函数接口。 参考 https://tronche…...
The Past, Present and Future of Apache Flink
摘要:本文整理自阿里云开源大数据负责人王峰(莫问)在 Flink Forward Asia 2024上海站主论坛开场的分享,今年正值Flink开源项目诞生的第10周年,借此时机,王峰回顾了Flink在过去10年的发展历程以及 Flink社区…...
多模块应用、发布使用第三方库(持续更新中)
目录: 1、多模块概述(HAP、HSP、HAR) HAR与HSP两种共享包的主要区别体现在: 2、三类模块: 3、创建项目:项目名:meituan (1)创建Ability类型的Module,编译后为HAP文件…...
An error happened while trying to locate the file on the Hub and we cannot f
An error happened while trying to locate the file on the Hub and we cannot find the requested files in the local cache. Please check your connection and try again or make sure your Internet connection is on. 关于上述comfy ui使用control net预处理器的报错问…...
UE5安装Fab插件
今天才知道原来Fab也有类似Quixel Bridge的插件,于是立马就安装上了,这里分享一下安装方法 在Epic客户端 - 库 - Fab Library 搜索 Fab 即可安装Fab插件 然后重启引擎,在插件面板勾选即可 然后在窗口这就有了 引擎左下角也会多出一个Fab图标…...
Linux C语言操作sqlite3数据库
一、环境配置 1、下载源码:sqlite-autoconf-3470200.tar.gz 2、解压,cd到源码主目录 3、配置参数 ./configure --prefix/usr/local/ 如果是交叉编译环境 ./configure CC/opt/rk3288/gcc-linaro/bin/arm-linux-gnueabihf-gcc --hostarm-linux --pre…...
【人工智能】因果推断与数据分析:用Python探索数据间的因果关系
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 因果推断是数据科学领域的一个重要方向,旨在发现变量间的因果关系,而不仅仅是相关性。本篇文章将从因果推断的理论基础出发,介绍因果关系的定义与建模方法,涵盖因果图(Causal Graph)、d-分离、反事实估计等…...
freeswitch(30秒自动挂断)
亲测版本centos 7.9系统–》 freeswitch1.10.9 本人freeswitch安装路径(根据自己的路径进入) /usr/local/freeswitch/etc/freeswitch场景说明: A和B接通通话时候,时间开始计算到达30秒后自动挂断使用方法 进入/usr/local/freeswitch/etc...
大模型呼入机器人有哪些功能特点?(转)
大模型呼入机器人有哪些功能特点?(转) 原作者:开源呼叫中心FreeIPCC,其Github:https://github.com/lihaiya/freeipcc 大模型呼入机器人,作为现代通信技术与人工智能深度融合的产物,正逐渐成为企业提升服务…...
网络工程师常用软件之配置对比软件
「24-配置比对软件-汉化WinMerge」 链接:https://pan.quark.cn/s/cef7541d62d1 ################################################################################ 我们经常在项目或者运维中对设备的config进行变更,那么我们如何快速的知道变更了什么…...
Linux之远程登录
一、使用ssh命令登录 winR打开cmd输入命令 # root是命令,192.168.101.200是地址 ssh root192.168.101.200是否要保存密码,就是yes以后可以免密登录,这里就yes了 输入密码,就登录成功了 操作完成之后,输入命令退出 e…...
#渗透测试#漏洞挖掘#红蓝攻防#js分析(上)
免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…...
数智读书笔记系列006 协同进化:人类与机器融合的未来
书名:协同进化:人类与机器融合的未来 作者:[美]爱德华阿什福德李 译者:李杨 出版时间:2022-06-01 ISBN:9787521741476 中信出版集团制作发行 爱德华・阿什福德・李(Edward Ashford Lee)是一位在计算机科学与工程领域颇具影响力的学者&am…...
操作系统(7)处理机调度
前言 操作系统中的处理机调度是一个核心概念,它涉及如何从就绪队列中选择进程并将处理机分配给它以运行,从而实现进程的并发执行。 一、调度的层次 高级调度(作业调度): 调度对象:作业(包含程序…...
folly之侵入式链表
侵入式链表 侵入式链表(Intrusive Linked List)是一种数据结构,它的节点不是通过包含链表节点的对象来实现的(像非侵入式链表那样),而是通过在节点对象中直接包含指向其他节点的指针来实现的。这意味着链表节点对象本身需要被修改以包含指向链表其他部分的指针。 直接上…...
GPT-5 训练遇阻:预期目标难达成与交付延期的深度剖析
# GPT-5 训练遇阻:预期目标难达成与交付延期的深度剖析 近期,GPT-5 的训练进展引发了广泛关注与诸多讨论,令人遗憾的是,其训练并未达到预期目标,且难以在规定时间内交付。这一状况不仅让期待它的人们大感意外…...
C缺陷与陷阱 — 3 深入理解表达式
目录 1 表达式的运算次序 1.1 自增或自减操作符 1.2 函数参数 1.3 函数指针 1.4 函数调用 1.5 嵌套赋值语句 2 函数调用不作为函数参数 3 赋值语句的谨慎使用 1 表达式的运算次序 除了少数操作符(函数调用操作符 ( )、&&、| |、? : 和 ,ÿ…...
Linux常用指令-----中
Linux常用指令----上 Linux常用指令----下 Linux系列 文章目录 Linux系列前言一、man指令(重要)二、cp指令(重要)三、echo指令四、cat指令五、mv指令六、which指令七、alias指令总结 前言 接下来我们介绍的指令是承接上篇&#…...
k8s 部署方式kustomization和helm的区别
Kustomize 和 Helm 是 Kubernetes 中两种流行的配置管理工具,它们都用于管理 Kubernetes 资源,但它们的设计理念、功能和适用场景有所不同。以下是两者的详细对比: 1. 基本概念 Kustomize 功能:原生于 Kubernetes 的工具&#x…...
Alogrithm:骑士走棋盘
1. 说明 骑士旅游(Knights tour)在十八世纪初倍受数学家与拼图迷的注意,它什么时候被提出已不可考,骑士的走法为西洋棋的走法,骑士可以由任一个位置出发,它要如何走完所有的位置? 2. 解法 骑士旅…...
北大团队改造DeepSeek注意力,速度快四倍还不丢精度
听雨 发自 凹非寺量子位 | 公众号 QbitAI就在大家都急头白脸地等待DeepSeek-V4的时候,冷不丁一篇新论文引起了网友们的注意——提出新稀疏注意力机制HISA(分层索引稀疏注意力),突破64K上下文的索引瓶颈,相比DeepSeek正…...
告别网络依赖:MedGemma 1.5医疗助手,离线环境下的智能健康顾问
告别网络依赖:MedGemma 1.5医疗助手,离线环境下的智能健康顾问 1. 医疗AI的新范式:离线智能问诊 在医疗健康领域,数据隐私和即时响应往往难以兼得。传统在线医疗咨询需要联网上传敏感健康数据,而完全离线的解决方案又…...
终极Goyo.vim配置指南:打造完美无干扰写作环境的10个技巧
终极Goyo.vim配置指南:打造完美无干扰写作环境的10个技巧 【免费下载链接】goyo.vim :tulip: Distraction-free writing in Vim 项目地址: https://gitcode.com/gh_mirrors/go/goyo.vim Goyo.vim是一款专为Vim用户设计的无干扰写作插件,它能帮助你…...
EdB Prepare Carefully完整教程:3步打造完美RimWorld开局体验
EdB Prepare Carefully完整教程:3步打造完美RimWorld开局体验 【免费下载链接】EdBPrepareCarefully EdB Prepare Carefully, a RimWorld mod 项目地址: https://gitcode.com/gh_mirrors/ed/EdBPrepareCarefully 还在为RimWorld随机生成的"废柴"殖…...
OpenClaw安全实践:Phi-3-vision-128k-instruct本地化部署权限管理指南
OpenClaw安全实践:Phi-3-vision-128k-instruct本地化部署权限管理指南 1. 为什么需要关注OpenClaw的安全配置? 去年夏天,我在调试一个自动化文档处理流程时,差点酿成大错。当时OpenClaw在凌晨3点自动执行了错误的清理指令&#…...
什么是技术性SEO,如何进行优化_如何优化网站的页面标题(title)
什么是技术性SEO 在数字营销领域,SEO(搜索引擎优化)是提高网站在搜索引擎结果页面(SERP)中排名的关键技术。SEO主要分为技术性SEO和内容性SEO两大类。技术性SEO是指通过优化网站的技术结构和性能,提升搜索…...
G-Helper终极指南:5分钟快速掌握华硕笔记本高效控制
G-Helper终极指南:5分钟快速掌握华硕笔记本高效控制 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar…...
测试、项目管理、软件度量和质量
欢迎来到我的软考中级——软件设计师备考合集。这里不只是一份简单的知识点堆砌,而是我在备考征途中,对庞杂知识体系进行深度梳理与内化的结晶。 面对浩瀚的考纲,从计算机组成原理的底层逻辑,到操作系统的进程调度;从数…...
SAP ABAP老系统也能玩转REST API?手把手教你用SICF和IF_HTTP_EXTENSION打通接口
SAP ABAP老系统也能玩转REST API?手把手教你用SICF和IF_HTTP_EXTENSION打通接口 在数字化转型浪潮中,许多企业仍运行着历史悠久的SAP ABAP系统。这些系统承载着核心业务逻辑,却常因技术栈陈旧而难以与现代应用生态对接。本文将揭示如何利用AB…...
千问3.5-9B多模态扩展:OpenClaw处理图片与文本混合任务
千问3.5-9B多模态扩展:OpenClaw处理图片与文本混合任务 1. 为什么需要本地多模态自动化 去年夏天,我电脑里堆积了上千张混杂着文字说明的截图——有技术文档片段、会议纪要、临时灵感记录。手动整理这些内容时,我突然意识到:如果…...
