个人博客:Sekyoro的博客小屋
个人网站:Proanimer的个人网站
当我们想要进行底层图形应用(GUI)开发时,往往需要用到窗口系统和图形库,这里简单介绍一下
视窗系统(window system)与通信协议
下面内容主要针对Unix-like操作系统
视窗系统是以使用视窗作为主要特征之一的图形用户接口的构成组件.更为明确地说,它是桌面环境的构成组件.视窗系统支撑著窗口管理器的实现(implementation);视窗系统为“图像硬件(graphics hardware)、指向设备(pointing devices)提供基本支持.绘制鼠标光标,一般也与视窗系统相关.
X Window System(X11)
X窗口系统是一种以位图方式显示的软件窗口系统,X窗口系统通过软件工具及架构协议来建立操作系统所用的图形用户界面,此后则逐渐扩展适用到各形各色的其他操作系统上.
在X11的设计中,应用程序和显示器不必在同一台计算机上,这一点并不明显.在开发X时,X server运行在工作站上,而用户在具有更强处理能力的远程计算机上运行应用程序是很常见的.
X Window核心协议
X Window 核心协议是X窗口系统的基础协议,它是一个以位图显示的网络化视窗系统,用来在Unix、类Unix和其它操作系统上建立用户图形界面.X Window 系统基于主从式模型:单一服务器控管硬件的输出入,如屏幕、键盘和鼠标;所有的应用程序都被视作客户端,用户之间透过服务器来交互.
交互部分由X Window核心协议来管理.还有其它与X窗口系统有关的协议,有的建立在X Window核心协议之上的,有的是独立的协议.
X server接受来自键盘,鼠标,显示器的输入,并将这些请求发送给client.
X server
与大多数早期的显示协议不同,X是专门设计用于网络连接,而不是用于集成或附加的显示设备.X具有网络透明性,这意味着在网络上某处的计算机(例如Internet)上运行的X程序可以在网络上其他计算机上运行的X服务器上显示其用户界面.
X服务器通常为X客户机提供图形资源和键盘/鼠标事件,这意味着X服务器通常在人类用户面前的计算机上运行,而X客户机应用程序在网络上的任何地方运行,并与用户的计算机通信,请求图形内容的呈现,并从包括键盘和鼠标在内的输入设备接收事件
Xlib与其他的客户端程序
大部分的客户端程序借由 Xlib 客户端程序库与服务器交流.特别是客户端大多使用 Xaw、Motif、GTK+、Qt 之类使用到 Xlib 的程序库,方便和服务器交互.
XLib是X Window System的核心库,它提供了与窗口系统交互的基本功能,如创建窗口、处理事件和绘制图形
Xlib是一种X Window System协议的客户端,以C语言撰写.其功能是与X server沟通.这样的功能可以让程序人员撰写程序时,
#include <X11/Xlib.h>
#include <unistd.h>
int main()
{
Display* MainDisplay = XOpenDisplay(0);
Window RootWindow = XDefaultRootWindow(MainDisplay);
Window MainWindow = XCreateSimpleWindow(MainDisplay, RootWindow, 0, 0, 800, 600, 0, 0, 0x00aade87);
XMapWindow(MainDisplay, MainWindow);
XFlush(MainDisplay);
for(;;) {
sleep(1); }
}
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <stdio.h>
typedef struct {
int X;
int Y;
int Width;
int Height;
} entity;
int main()
{
Display* MainDisplay = XOpenDisplay(0);
Window RootWindow =