在Windows上,无论您使用哪个框架,所有框架最终都需要调用用户模式user32 :: CreateWindowEx API来在桌面上实际创build一个窗口。
在Ubuntu上,或者一般的Linux系统上,似乎select使用像Wx或Qt或GTK +这样的Widget框架来创build一个GUI应用程序,但是所有这些框架都觉得他们正在包装更基础的东西。 这些都是直接与Linux上的X对话吗? 我以为Ubuntu正在转移到一个非X的窗口pipe理器,那么他们将使用什么呢?
我会用什么库访问所有这些框架使用的窗口pipe理器?
他们都包装Xlib
,如果你切换到非X服务器,你将需要一个Xlib
替换(或Xlib包装)。
您原则上可以通过学习X11协议和所有相关的扩展(ICCCM,桌面约定…)来编写自己的X库,但这是一项艰巨的任务。 如果你这样做,你可以使用最低级别的系统调用(send,recv,…)。
某些语言(SML,Common Lisp,Ocaml)的某些实现可以在不使用Xlib或XCB C库的情况下实现X11协议。 但这是一个很大的任务,我不会推荐它。
而Ubuntu谈到的Wayland还不成熟,但是工具包库(如GTK和Qt)正在慢慢地支持它(除了支持X11之外)。
今天,您也可以选择开发基于Web的应用程序,而不是基于X11的应用程序。 有时HTTP + XHTML + AJAX更简单,从头开始重新编码X11。
但是,不要单独开始编写图形堆栈…这是一个太大的任务…
X运行在一个精心指定的网络协议上,所以你可以直接说服这个协议到服务器,如果你喜欢的话。 在实践中,GUI工具包包装Xlib(也可能是Xt)。 传统上,Xlib与之前一样低,但是现在Xlib已经在一个更清洁的低级别X协议库“xcb”之上重新实现了。