- X服务器
Linux和其他基于PC的系统上最常见的X实现是XFree86(网址点击打开链接)
这个软件包里的X服务器都是为PC个人电脑上使用的各种显卡专门编写的
- X协议
X协议不仅能够穿越网络,运行在同一台机器上的客户和服务器之间同样适用
- Xlib库
大多数X软件都需要使用一个C语言函数库作为程序的设计接口,Xlib库
它为X协议里信息交换提供了一个API
Xlib本身并没有增加太多东西,它只能在屏幕上画线条和对鼠标动作做出相应
如果你需要菜单/按钮/卷屏条以及其他东西,必须自己编写
- X工具包
详细介绍见本书 482页
包括Xt/OpenLook/Motif/Qt和GTK+
工具包造成的差异:
linux里有两个不同的编辑器xedit和textedit.xedit是一个非常简单的编辑器,想加载一个文件,必须将名字敲入一个框子里,再点击"load"按钮
textedit是sun公司用OpenLook工具包编写的.在打开文件的时候,用户可以浏览文件系统跳出自己想打开的文件,提供了熟悉的3D效果
- 启动
Display *XOpenDisplay(char *display_name);
int XCloseDisplay(Display *display);
display_name参数指定的是我们打算链接的显示设备.如果他是NULL,就使用环境变量DISPLAY的值
它的格式是 "hostname:server[.display]",一台主机可以有一个以上的X服务器,每个服务器可以控制一个以上的显示设备比如桌面确实很大,你可以使用":0.1"
当客户程序用完X服务器的时候,它必须以最初由XOpenDisplay调用返回的那个Dispay结构为参数调用XCloseDisplay
环境变量DISPLAY被用来把应用程序引向每个特定的显示服务器
- X用到的事件
键盘事件 按键的按下和释放 鼠标事件 按钮的按下和释放;鼠标移动;鼠标进入/离开一个窗口 窗口事件 窗口的创建/关闭;窗口获得/失去焦点;窗口被遮蔽/重新显示等
- Tk工具包
Tk的素材是用C语言编写的,并且要通过Tcl语言绑定到事件处理器上
下载地址 点击打开链接
在Tk程序设计之前,需要保证Tk的窗口化shell,即wish
还需要设置环境变量TK_LIBRARY和TCL_LIBRARY指向正确的地点
- wish
shell敲入wish,弹出交互式wish窗口,wish是一个内建了Tk函数的tclsh
- 窗口程序设计
首先,创建程序的外观,添加必要的组件以访问最终要包括在程序中的功能,从Tk工具包里挑选一个素材,对它的外观进行初始化
然后,用Tk的几何尺寸管理器安排好它在屏幕窗口里与其他素材的相对位置
接着,编写代码,让每一个GUI部件对相应的用户命令做出正确的响应
比如,点击"load"按钮
- 素材命令
button .b
创建一个新素材和一个名为".b"的素材命令
.b configure -text "Hello"
将把按钮".b"上的文字设置为"Hello"
- 动手说"Hello"
#!/usr/bin/wish -f pack [button .b -text "Hello\nWorld!!!" \ -juntify center \ -width 20 \ -command (puts "Hi")]
# ./hello.tk即可出现窗口化的Hello World
-command选项给这个按钮链接了一个事件处理器
当点击这个按钮时,就会在父窗口里输出字符串"Hi"
".a.b.c"表示素材,".c"是".a.b"的子/".a"的孙/应用程序素材"."的重孙