FLTK & the List of Widget toolkits based on C/C++

Fltk_widget_toolkit All below widget toolkits are and based on C/C++(from wikipedia):

CEGUI · Component Library for Cross Platform · dlib C++ Library · · FOX toolkit · OpenGL User Interface Library · GTK+ · IUP · Juce · Qt · Tk · TnFOX · Visual Component Framework · wxWidgets · YAAF · XForms · XVT

其中我们可以看到比较熟悉的,OpenGL,GTK+,, 等。和或者相比,非常轻量级的也具有很多优点。

The "Fast, Light Toolkit" (generally pronounced "fulltick") is a cross-platform GUI library, developed by Bill Spitzak and others. Made with 3D graphics in mind, it has an interface to OpenGL, but it is still suitable for general .

Using its own widget, drawing and event systems (though FLTK2 has gained experimental support for optionally using the cairo graphics library) abstracted from the underlying system-dependent code, it allows for writing programs which look the same on all supported operating systems.

is free software, licensed under LGPL with an additional clause permitting static linking from applications with incompatible licenses. It includes FLUID ( User Interface Designer), a graphical designer that generates C++ source and header files.

In contrast to libraries like Qt and wxWidgets, uses a more lightweight design and restricts itself to functionality. Because of this, the library is very small (the "Hello World" program is around 100 KiB), and is usually statically linked. It also avoids complicated macros and separate code preprocessors, and does not use the following advanced C++ features: templates, exceptions, RTTI or, for 1.x, namespaces. Combined with the modest size of the package, this leads to a relatively short learning curve for new users.

These advantages come with corresponding disadvantages. offers fewer widgets than most toolkits and, because of its use of non-native widgets, does not have native look-and-feel on any platform.

 

下面是一个带OK按钮的小例子,The following example for 1.x creates a window with an "Okay" button:

#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Button.H>

int main(int argc, char *argv[]) {
   Fl_Window* w = new Fl_Window(330, 190);
   new Fl_Button(110, 130, 100, 35, "Okay");
   w->end();
   w->show(argc, argv);
   return Fl::run();
}

下面是另一位网友写的简介,感觉比较客观,供那些在//……中犹豫不决的朋友参考:

,如同其名字所表达的:the fast light tool kit,一个轻量级的开发库。但这轻量级并不代表功能的羸弱,相反,在具有基本的功能之外,还拥有一些特殊的功能,比如跨平台、内置 opengl功能、速度更快、尺寸更小、协议宽松等。当然,缺点也是有的,比如对于复杂的界面构件支持不够,资源支持的不足等。但一个工具如果使用的好,取其长而去其短,自然可以飞花摘叶皆可伤人;p

我选择 的过程还是比较曲折的,当初做arm下的开发,选择的库是minigui,一个国内开发的界面库。当时还支持类unix平台,对 windows的支持尚在开发中。由于需要寻找一些问题的解答,所以经常在其论坛上搜索,从而知道了还有microwindow、nano、 qtembedded等嵌入型开发库,但当时没有太过注意。后来又开始转向wince平台的开发,这一搁就是2年。再后来终于要做跨平台的开发,对具有跨平台的开发库开始注意起来。

一开始的选择是,但是研究了一段时间后发现不好解决的问题越来越多,终于放弃。最头疼的就是c++类的事件传递,内部使用的是一个类似mfc的方法,所有传递事件的类全部要从一个根类继承,这样就导致创建的类和绑定过甚,复用性大大降低,同时由于的目标不仅仅是,造成其包含功能过多,其内部结构非常复杂,虽然是 opensource,但要若要修改其代码还是很困难的。综上所述,并不符合我的要求,从而被排除在外。

之后研究的,老牌的跨平台开发库,工具很多,开发也很人性化,qtdesign很像delphi的界面开发方式,代码带有强烈的linux风格,但是看看附带的库文件又实在让人有些泄气,尺寸大,发布麻烦。所以在试用了一段时间后还是放弃了。

在此期间,其实也看到过一些对的介绍,但大多数对其评价不高,也就没有注意。直到有一次偶然心血来潮,上http: //www..org看了一下,发现 似乎正对我的胃口,这才开始对其进行了深入的研究。经过一段时间的实际开发,个人觉得,对于跨平台和代码简洁而言,是再适合不过了。

的底层只提供一套完整的画点、画线功能,另外附带了字体的显示功能,但对字体的支持还很粗糙,尤其对于非英文字符集而言,后面我会详细说明。在基本的点、线功能基础上,完全自己实现了一套界面,比如button、label、edit、tab等,全部都是由基本的点线画出。看到这,可能你会觉得这实在是属于自己造轮子,吃力不讨好。诚然,如果你只针对一种平台开发,这样的做法不能带来多少好处,还造成学习时间的拉长。但若要针对多个平台开发,这样做的好处就很明显了。首先是移植容易,只要针对目标平台实现基本的点线功能就可以实现代码的移植,这可能是所有跨平台库中最方便最直接的方案,目前ftlk支持macos、windows、linux(x-window)等平台,针对wince(主要是unicode的问题)和 plam 的开发正在进行中。其次是保持了界面的一致性,虽然、gtk等开发库也具有这种功能,但是他们都需要一套基本库的支持,无法做到系统尺寸的优化,而对于而言,这却恰恰是他的优点和长项。最后是代码层次清楚、结构简单,由于大部分的工作就是基于底层的点线功能进行自绘,所有很多代码都是简洁明了,很少费话。

底层之上是一套以fl_开头的类,代表了各种构件,比如fl_window、fl_button、 fl_input等,使用起来很是容易。同时由于上面所说的,所有的界面构件都是画出来的,因此在熟悉了这种方式后,生成自己的构件也是很容易的,反正是画界面嘛,既然别人能做到,你也能做到,实在不行可以查阅源代码进行学习。这些界面类的共同特点是轻量型、都拥有一个draw(),只要在draw()里实现自己的绘画动作即可。

说到界面就不能不说其事件实现方式,对于而言,使用的是最直接的方法:while(1){}。这也是很多人批评原始的一个原因。但仔细想想,其实这是最直接的办法,不管是哪种平台,最终的事件方案不外乎是死循环和中断,中断的确具有很多好处,但只要while(1)能完成这部分的功能,那又有什么关系呢。每个界面类都有一个handle(int event),只要继承这个成员函数,就可以在其中处理自己的事务。是不是很简单?同时由于这样的事件方式,造成的刷新速度很快,事件反应迅速,也算是个附带优点了。现在大多数的开发库都是采用oo方式的事件处理方式,但却采用了最原始的函数指针方式,也算是一个异类,这可能和的 unix背景有关,无论如何,这种方式还是需要一定的适应时间的,而且这种方式的优缺点也是属于各花入各眼了,不过我本人还是很喜欢这种方式的,谁叫我比较原始呢#-_-

产生于next环境,发展于x-window环境,所以对图形加速的支持必然是选择opengl。 使用fl_gl_window这个类将opengl的基本功能囊括其中,只要在fl_gl_window的draw()里glbegin/glend即可,基本的设置工作全都做好了,对于我现在的系统要求简直是最适合不过了。

基于,对使用者的要求非常宽松: contrary to popular belief, it can be used in commercial software - even bill gates could use it! 所以开发者不需要担心其项目的隐形问题。但是如果对进行了卓有成效的修正最好还是能回馈给开发组,所谓我为人人,人人为我嘛。

说了一堆的好话,现在开始谈谈的缺点。首先一条就是对非英文字体特别是中文的支持比较差,甚至是非常差。在windows平台下还好一点,因为在 windows平台下使用的是textout函数输出字符串,但是在x-window环境下就完蛋了,无法正确显示中文,也不能调用输入法进行输入。从这点来说,还是只适合一些封闭软件的开发,对于通用软件而言并非是一个好的选择。但只能在windows平台下开发中文软件也不是个办法,要解决中文的显示问题也不难,目前ftlk的稳定版是1.1.7,开发版是2.0,有人针对1.xx版本修改了一个unicode版本,可以很平滑的支持汉字的显示,但很遗憾,我没有编译成功过,如果谁编译成功了可以给我来个信。2.0已经对非英文的支持进行了专门的开发,但目前还没有release,在不久的将来应该可以完整的解决这个问题。目前,要么等待,要么就像我这样,用点阵字库瞒天过海。具体方法因为还不够成熟,就不公布了。

无论如何,的目标还是针对嵌入式和封闭软件的开发,所以复杂的界面并非其长项,如果想做出花哨复杂的界面,还是用其他库比较好,并不适合。

综上所述,的优点和缺点都是非常的突出,如何取舍还是自己决定吧。


本贴来自天极网群乐社区–http://q.yesky.com/group/review-17814957.html

Share and Enjoy:
  • Print this article!
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • RSS
  • Slashdot
  • Technorati
  • TwitThis

Related posts:

  1. Using XRC in wxWidgets based Application for UI design
  2. Code::Blocks IDE in openSUSE 11.1编译和安装指南
  3. Setting up Code::Blocks to work with SDL - 多媒体编程库
  4. Book: Cross-Platform GUI Programming with wxWidgets (Bruce Perens)(含中英文版本下载地址)
  5. A rough guide for wxWidgets programming
  6. Python programming- List extend() and append()
  7. wxWidget Layout Algorithm Demo - BoxPlanner
  8. QT4+MinGW+Code::Blocks IDE集成
  9. CB introduction and features
  10. wxWidgets Programming: Sizer, Frame and Panel

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word

Contact us

Admin: Bryan Wu