![]() |
我编程,我快乐!——人人都能学好编程。 |
跨平台的C++ GUI库——wxWidgets 简介1.“统一的GUI库”——需要吗?首先废话一下“GUI”就是“图形用户界面”。而“图形用户界面”就是指你在使用Windows操作系统,或Linux操作系统等时,天天打交道的“窗口、按钮、列表框”等等。 很长时间,很多人抱怨C++语言似乎没有一个统一的图形界面库……这个抱怨是不合理的。 这里的“统一”,往往有三种意思:
这三点需要好好分析。 第一点很好理解,大家都不希望同一个程序,在不同平台要用两套完全不同的代码来实现。顺便地,一说到“跨平台”,很多人就期待起号称“一次编写,到处运行”的Java,可惜,在GUI方面,Java可归为实现得最差的语言之一。 第二点,要求有一套“标准”图形界面库,以一个普通的C++学习者的角度来看,确实也不过份。因为有时“选择太多”也是一种痛苦。然而,如果从“官方”的角度来看, 非要逼着他们做出一个选择,似乎也很难;并且某一方的库有了“垄断”地位之后,恐怕会有些负作用。事实上,C++语言,在图形、数学、网络等等方面,都同样存在很多套优秀的实现,事实上,大家只要根据自身需要,参考他人实际评价,选择一个最合适的就行。何必苦等着官方扭一个标准给你呢?万一不是你的所好呢? 第三点,不仅是C++语言,也是Java等语言“曾经的”追求,但等有了真正的实现之后,用户却不喜欢了。大家最终发现,一套在不同操作系统下都展现一致的界面,原来就是一套“最奇怪”的界面,无论在Linux下还是在Windows下,它的界面都是当前操作系统的风格“格格不入”,夸张一点地说,它就是一个外星来到地球,无论它在美国,还是在中国,谁看它都觉得它长得没个“人样”。所以, 当前,在图形界面的风格上,大家的追求是:你在中国,就长成中国人样;你到美国,就长成美国样——这才是做界面的最高境界。 2. 统一GUI——唯C++能完美实现三点需求,一下子被我“否定”了两点,这是不是说明,前面的抱怨是有理由的呢?即:是否C++根本就做不到统一的图形界面库呢? 答案是:如果C++做不到统一图形界面库,那么,几乎就没有别的编程语言可以做到了。为什么这么说? 在IT界,GUI是一个“古老的”话题了,如果同样“古老的”C++语言都解决不了,那还有什么新新人类的幼稚语言可以解决?——呵呵,这样说当然是了。换一种说话吧,在IT界,GUI是一个“绝对复杂的”话题了,如果同样“绝对复杂的”C++语言都解决不了,那么,那些正好自称是“简单的”语言可以解决呢?——不同,这样还是会被认为是强辞夺理。事实是,无论是Windows还是Linux,多数架于操作系统之上的图形用户界面,都是通过C及C++语言写成的,可以说,C++语言是和各个GUI系统一起成长的,并且一直就是解决各类GUI问题的主力军。 很多从c++语言发展或改造的语言,比如Java,在实现跨平台的GUI时,曾经去试过前述的“第三点”,想完全自己画一种“统一界面”,但这种思路失败了。于是改走“本地化”的路线,一到走“本地化”这个路线,不同操作系统之间的不同图形界面之间的庞大复杂性马上显现。典型的是Java语言为了简化编程难度,实现了“内存自动回收”,这功能对普通内存数据的管理,相当简捷有效,但遇上图形界面的资源,却成了严重问题。所有依赖“虚拟机”的,不能直接访问操作系统GUI接口的编程语言,在这一点上和C/C++做比较,正是取自身之短,相比C++之长。 .Net的C#等语言在跨平台上实现上,那是一个矛盾。因为它隶属于微软公司,而我们并不明白微软是不是喜欢大家在非Windows的平台上,比如在Linux系统上使用C#来实现Linux的图形界面。 事实上,大家也看到Java或C#语言并更多地用在B/S结构上,也就说是它们实际放弃了本地界面的实现,完全把界面放到网页上,由大家机器上的浏览器,比如IE或Firefox去实现,而IE或FF,其实也是用C/C++写成的一个客户端。 可能会问,那么C语言呢?在解决“统一”GUI这个问题上,C语言和C++相比,会不会更好些?事实也不是。C语言主要发力处在于实现不同平台上各自一套的图形界面上。比如,无论是Linux上或是Windows下,多数GUI原始接口绝大多数以C语言的形式提供接口,关键问题就是这些接口在同不系统上表现得千差万别,于是造成了GUI无法在这方面统一的问题。要将这些千差万别的接口进行统一,C++语言所具备的,比C语言方便得多的“抽象”能力,正好起作用。 如此分析之后,之所以说C++最适合于解决统一GUI问题,也就一句话:天生与C语言无缝的能连接;又具备比C语言更为方便的抽象表达能力。 3.为什么是wxWidgets?原因如下:
这里给出C++学友相对比较关心的“可视化”设计界面,展示了在Code::Blocks中如何设计使用wxWidgets库:
(Code::Blocks中的可视化设计) 实际运行效果如下图:
(实际运行效果) 这是在Windows XP 下运行的效果,如前所述,它的展现完全采用当前操作系统的本地图形界面风格。 4. 相关网站wxWidgets官方网站 : http://www.wxwidgets.org/ |