讨论fltk的qq群
[ 2007-01-28 18:42:30 | 作者: 痉挛的老鸨 ]
群号:32425450
欢迎对fltk有兴趣的开发人员加入
欢迎对fltk有兴趣的开发人员加入
不久前fltk终于释出可以实用的2.0版本,目前的具体版本是2.0.x-r5556,让我们看看具体的更新和变动
首先是字体的巨大改进,开始支持utf8,所以在linux下汉字无法显示和输入法无法输入的问题已经彻底解决,但同时也带来一些问题,就是在代码内必须使用utf8的汉字才能正确显示在界面上,但是unicode的编辑器又不是那么好找,再说在windows下开发的话一般都会使用vc,而在vc下输入unicode是一件有困难的事情,至少我没有找到好的插件,所以需要一个解决办法,那就是<fltk/utf.h>里的函数,帮助文档里没有说的很清楚,但是大体上还是可以猜到意思的
修改了class Browser,变成了一个tree,在1.0中想显示一个grid或者listview一直只能自己处理,现在不用了,这个Browser还算可以,提供了基本的功能,稍微还有一些扩充,如果想再丰富一些就只有自己继承了,反正fltk的宗旨就是自己动手丰衣足食。
Opengl的功能貌似有一些修正,但是我没有用到,而且demo中关于OpenGL的例子还没有提供,所以目前情况未知
帮助文档未完善,而且代码中附带的帮助无法使用,所以很多时候还是查1.0的帮助以及看源代码更加有效一些
所有的头文件和类名全部去除了FL_,引入了namespace,好处是类看起来更清楚了,坏处是从1.0的代码升级变得很麻烦。头文件从<FL/FL_XXXX.H>变成<fltk/xxxx.h>,全部变成了小写,而且去掉了FL_,同时目录也变成fltk/了,这些细节稍微用一段时间就会习惯,但是一开始会造成一些问题,虽然在fltk目录下也保留了一些兼容的头文件,但是建议还是不要用,因为不全,而且迟早要换的,何必不一步到位?
对编译器支持的更全,目前支持vc6,vc.net,devcpp,gcc,Code::Blocks,bc5,基本囊括了流行的C/C++编译器
支持整体theme,可以一次性设置当前界面的theme
打算引入一个叫cairo的库,具体作用好像是用于矢量运算的,属于第三方的代码,在fltk的站点上关于这个有一个投票,大多数人还是拒绝在fltk中加入外来插件,都觉得应该保持fltk的轻量快速的特征
待续.....
首先是字体的巨大改进,开始支持utf8,所以在linux下汉字无法显示和输入法无法输入的问题已经彻底解决,但同时也带来一些问题,就是在代码内必须使用utf8的汉字才能正确显示在界面上,但是unicode的编辑器又不是那么好找,再说在windows下开发的话一般都会使用vc,而在vc下输入unicode是一件有困难的事情,至少我没有找到好的插件,所以需要一个解决办法,那就是<fltk/utf.h>里的函数,帮助文档里没有说的很清楚,但是大体上还是可以猜到意思的
修改了class Browser,变成了一个tree,在1.0中想显示一个grid或者listview一直只能自己处理,现在不用了,这个Browser还算可以,提供了基本的功能,稍微还有一些扩充,如果想再丰富一些就只有自己继承了,反正fltk的宗旨就是自己动手丰衣足食。
Opengl的功能貌似有一些修正,但是我没有用到,而且demo中关于OpenGL的例子还没有提供,所以目前情况未知
帮助文档未完善,而且代码中附带的帮助无法使用,所以很多时候还是查1.0的帮助以及看源代码更加有效一些
所有的头文件和类名全部去除了FL_,引入了namespace,好处是类看起来更清楚了,坏处是从1.0的代码升级变得很麻烦。头文件从<FL/FL_XXXX.H>变成<fltk/xxxx.h>,全部变成了小写,而且去掉了FL_,同时目录也变成fltk/了,这些细节稍微用一段时间就会习惯,但是一开始会造成一些问题,虽然在fltk目录下也保留了一些兼容的头文件,但是建议还是不要用,因为不全,而且迟早要换的,何必不一步到位?
对编译器支持的更全,目前支持vc6,vc.net,devcpp,gcc,Code::Blocks,bc5,基本囊括了流行的C/C++编译器
支持整体theme,可以一次性设置当前界面的theme
打算引入一个叫cairo的库,具体作用好像是用于矢量运算的,属于第三方的代码,在fltk的站点上关于这个有一个投票,大多数人还是拒绝在fltk中加入外来插件,都觉得应该保持fltk的轻量快速的特征
待续.....
屁股冒烟之平沙落雁式
[ 2006-11-27 12:57:59 | 作者: 痉挛的老鸨 ]
老李同志,别催了,我这不是撅个腚正在努力么。我知道你急,但其实我更急,眼瞅着快年底了,一堆杂事纷沓而来,我也怕啊。
没办法,框架我已经写的差不多了,但由于现在的方式,一开始是看不到界面的,所以自我感觉已经写了很多了,却偏偏没有东西给你看。这感觉,好似吃了一顿大餐正醺醺然自得的时候,围观的过来问你吃的啥,一通描述却总说不明白,恨不能立刻去厕所挤点出来以表清白.....
昨晚把lua的书打印出来了,今天也查了一下lua for sqlite,lua for fltk也被我挖到后续项目之所在,一开始真以为项目已经隔屁了-_-! 说到这,估计明白的人已经很明白了,不明白的已经找砖头去了.....
其实我也是被逼的,山顶洞人的滋味很好受么,造轮子其实没啥快感,但是客户就是上帝,该死的是,这群上帝们各有各的地盘和bible,每个人还都念的不一样,为了避免二进制和source code衍化出无数枝头,只好全部script化了。不过这个方式倒是很有创造性,阿弥陀佛,rayman不要咬我.....
后面的项目一律照此方式处理,钦此!
ps:刚才在云风的blog上看人吵架,爽啊,掐的很激烈,很别开生面,很血肉模糊一塌糊涂。有兴趣的自己找去,关于dll的一篇文档,我记忆力比较差,就别摧残脑细胞了,看过就得。
没办法,框架我已经写的差不多了,但由于现在的方式,一开始是看不到界面的,所以自我感觉已经写了很多了,却偏偏没有东西给你看。这感觉,好似吃了一顿大餐正醺醺然自得的时候,围观的过来问你吃的啥,一通描述却总说不明白,恨不能立刻去厕所挤点出来以表清白.....
昨晚把lua的书打印出来了,今天也查了一下lua for sqlite,lua for fltk也被我挖到后续项目之所在,一开始真以为项目已经隔屁了-_-! 说到这,估计明白的人已经很明白了,不明白的已经找砖头去了.....
其实我也是被逼的,山顶洞人的滋味很好受么,造轮子其实没啥快感,但是客户就是上帝,该死的是,这群上帝们各有各的地盘和bible,每个人还都念的不一样,为了避免二进制和source code衍化出无数枝头,只好全部script化了。不过这个方式倒是很有创造性,阿弥陀佛,rayman不要咬我.....
后面的项目一律照此方式处理,钦此!
ps:刚才在云风的blog上看人吵架,爽啊,掐的很激烈,很别开生面,很血肉模糊一塌糊涂。有兴趣的自己找去,关于dll的一篇文档,我记忆力比较差,就别摧残脑细胞了,看过就得。
改编自fltk,添加了linux平台下的Sleep实现,只支持Windows和Linux,分别用vc和gcc编译,代码如下:
| 1 | //threads.h, LGPL |
| 2 | |
| 3 | #ifndef Threads_H |
| 4 | #define Threads_H |
| 5 | |
| 6 | #ifdef WIN32 |
| 7 | |
| 8 | #include < windows.h > |
| 9 | #include < process.h > |
| 10 | |
| 11 | typedef unsigned long Fl_Thread; |
| 12 | |
| 13 | static int fl_create_thread(Fl_Thread& t, void *(*f) (void *), void* p) |
| 14 | { |
| 15 | return t = (Fl_Thread)_beginthread((void( __cdecl * )( void * ))f, 0, p); |
| 16 | } |
| 17 | |
| 18 | #else |
| 19 | |
| 20 | // Use POSIX threading... |
| 21 | #include < pthread.h > |
| 22 | #include < unistd.h > |
| 23 | |
| 24 | typedef pthread_t Fl_Thread; |
| 25 | |
| 26 | static int fl_create_thread(Fl_Thread& t, void *(*f) (void *), void* p) |
| 27 | { |
| 28 | return pthread_create((pthread_t*)&t, 0, f, p); |
| 29 | } |
| 30 | |
| 31 | static void Sleep(unsigned long dwMilliseconds) |
| 32 | { |
| 33 | usleep(dwMilliseconds * 1000); |
| 34 | } |
| 35 | |
| 36 | #endif |
| 37 | |
| 38 | #endif // !Threads_h |
使用示例:
| 1 | #include "thread.h" |
| 2 | ... |
| 3 | |
| 4 | static Fl_Thread m_thread; // define |
| 5 | ... |
| 6 | |
| 7 | // thread create |
| 8 | fl_create_thread(m_thread, thread_fun, 0); |
| 9 | ... |
| 10 | |
| 11 | static void* thread_fun(void *p) |
| 12 | { |
| 13 | while (1) { |
| 14 | ... |
| 15 | } |
| 16 | |
| 17 | return 0; |
| 18 | } |
FLTK,如同其名字所表达的:The Fast Light Tool Kit,一个轻量级的GUI开发库。但这轻量级并不代表功能的羸弱,相反,FLTK在具有基本的GUI功能之外,还拥有一些特殊的功能,比如跨平台、内置 OpenGL功能、速度更快、尺寸更小、协议宽松等。当然,缺点也是有的,比如对于复杂的界面构件支持不够,资源支持的不足等。但一个工具如果使用的好,取其长而去其短,自然可以飞花摘叶皆可伤人;P
我选择FLTK 的过程还是比较曲折的,当初做ARM下的GUI开发,选择的GUI库是MiniGUI,一个国内开发的界面库。当时还支持类unix平台,对 Windows的支持尚在开发中。由于需要寻找一些问题的解答,所以经常在其论坛上搜索,从而知道了还有microwindow、nano、 qtembedded等嵌入型GUI开发库,但当时没有太过注意。后来又开始转向WINCE平台的开发,这一搁就是2年。再后来终于要做跨平台的开发,对具有跨平台的GUI开发库开始注意起来。
一开始的选择是wxWidgets,但是研究了一段时间后发现不好解决的问题越来越多,终于放弃。最头疼的就是C++类的事件传递,wxWidgets内部使用的是一个类似MFC的方法,所有传递事件的类全部要从一个根类继承,这样就导致创建的类和wxWidgets绑定过甚,复用性大大降低,同时由于wxWidgets的目标不仅仅是GUI,造成其包含功能过多,其内部结构非常复杂,虽然是 OpenSource,但要若要修改其代码还是很困难的。综上所述,wxWidgets并不符合我的要求,从而被排除在外。
之后研究的QT,老牌的跨平台GUI开发库,工具很多,开发也很人性化,qtdesign很像Delphi的界面开发方式,代码带有强烈的linux风格,但是看看附带的库文件又实在让人有些泄气,尺寸大,发布麻烦。所以在试用了一段时间后还是放弃了。
在此期间,其实也看到过一些对FLTK的介绍,但大多数对其评价不高,也就没有注意。直到有一次偶然心血来潮,上http: //www.fltk.org看了一下,发现FLTK 似乎正对我的胃口,这才开始对其进行了深入的研究。经过一段时间的实际开发,个人觉得,对于跨平台和代码简洁而言,FLTK是再适合不过了。
FLTK的底层只提供一套完整的画点、画线功能,另外附带了字体的显示功能,但FLTK对字体的支持还很粗糙,尤其对于非英文字符集而言,后面我会详细说明。在基本的点、线功能基础上,FLTK完全自己实现了一套界面,比如Button、Label、Edit、Tab等,全部都是由基本的点线画出。看到这,可能你会觉得这实在是属于自己造轮子,吃力不讨好。诚然,如果你只针对一种平台开发,这样的做法不能带来多少好处,还造成学习时间的拉长。但若要针对多个平台开发,这样做的好处就很明显了。首先是移植容易,只要针对目标平台实现基本的点线功能就可以实现代码的移植,这可能是所有跨平台GUI库中最方便最直接的方案,目前FTLK支持MacOS、Windows、Linux(x-window)等平台,针对WinCE(主要是unicode的问题)和plam 的开发正在进行中。其次是保持了界面的一致性,虽然QT、GTK等开发库也具有这种功能,但是他们都需要一套基本库的支持,无法做到系统尺寸的优化,而对于FLTK而言,这却恰恰是他的优点和长项。最后是代码层次清楚、结构简单,由于大部分的工作就是基于底层的点线功能进行自绘,所有很多代码都是简洁明了,很少费话。
底层之上是一套以Fl_开头的类,代表了各种GUI构件,比如Fl_Window、Fl_Button、 Fl_Input等,使用起来很是容易。同时由于上面所说的,所有的界面构件都是画出来的,因此在熟悉了这种方式后,生成自己的构件也是很容易的,反正是画界面嘛,既然别人能做到,你也能做到,实在不行可以查阅源代码进行学习。这些界面类的共同特点是轻量型、都拥有一个draw(),只要在draw()里实现自己的绘画动作即可。
说到界面就不能不说其事件实现方式,对于FLTK而言,使用的是最直接的方法:while(1){}。这也是很多人批评FLTK原始的一个原因。但仔细想想,其实这是最直接的办法,不管是哪种平台,最终的事件方案不外乎是死循环和中断,中断的确具有很多好处,但只要while(1)能完成这部分的功能,那又有什么关系呢。每个界面类都有一个handle(int event),只要继承这个成员函数,就可以在其中处理自己的事务。是不是很简单?同时由于这样的事件方式,造成FLTK的刷新速度很快,事件反应迅速,也算是个附带优点了。现在大多数的开发库都是采用OO方式的事件处理方式,但FLTK却采用了最原始的函数指针方式,也算是一个异类,这可能和FLTK的 ...
阅读全文...
我选择FLTK 的过程还是比较曲折的,当初做ARM下的GUI开发,选择的GUI库是MiniGUI,一个国内开发的界面库。当时还支持类unix平台,对 Windows的支持尚在开发中。由于需要寻找一些问题的解答,所以经常在其论坛上搜索,从而知道了还有microwindow、nano、 qtembedded等嵌入型GUI开发库,但当时没有太过注意。后来又开始转向WINCE平台的开发,这一搁就是2年。再后来终于要做跨平台的开发,对具有跨平台的GUI开发库开始注意起来。
一开始的选择是wxWidgets,但是研究了一段时间后发现不好解决的问题越来越多,终于放弃。最头疼的就是C++类的事件传递,wxWidgets内部使用的是一个类似MFC的方法,所有传递事件的类全部要从一个根类继承,这样就导致创建的类和wxWidgets绑定过甚,复用性大大降低,同时由于wxWidgets的目标不仅仅是GUI,造成其包含功能过多,其内部结构非常复杂,虽然是 OpenSource,但要若要修改其代码还是很困难的。综上所述,wxWidgets并不符合我的要求,从而被排除在外。
之后研究的QT,老牌的跨平台GUI开发库,工具很多,开发也很人性化,qtdesign很像Delphi的界面开发方式,代码带有强烈的linux风格,但是看看附带的库文件又实在让人有些泄气,尺寸大,发布麻烦。所以在试用了一段时间后还是放弃了。
在此期间,其实也看到过一些对FLTK的介绍,但大多数对其评价不高,也就没有注意。直到有一次偶然心血来潮,上http: //www.fltk.org看了一下,发现FLTK 似乎正对我的胃口,这才开始对其进行了深入的研究。经过一段时间的实际开发,个人觉得,对于跨平台和代码简洁而言,FLTK是再适合不过了。
FLTK的底层只提供一套完整的画点、画线功能,另外附带了字体的显示功能,但FLTK对字体的支持还很粗糙,尤其对于非英文字符集而言,后面我会详细说明。在基本的点、线功能基础上,FLTK完全自己实现了一套界面,比如Button、Label、Edit、Tab等,全部都是由基本的点线画出。看到这,可能你会觉得这实在是属于自己造轮子,吃力不讨好。诚然,如果你只针对一种平台开发,这样的做法不能带来多少好处,还造成学习时间的拉长。但若要针对多个平台开发,这样做的好处就很明显了。首先是移植容易,只要针对目标平台实现基本的点线功能就可以实现代码的移植,这可能是所有跨平台GUI库中最方便最直接的方案,目前FTLK支持MacOS、Windows、Linux(x-window)等平台,针对WinCE(主要是unicode的问题)和plam 的开发正在进行中。其次是保持了界面的一致性,虽然QT、GTK等开发库也具有这种功能,但是他们都需要一套基本库的支持,无法做到系统尺寸的优化,而对于FLTK而言,这却恰恰是他的优点和长项。最后是代码层次清楚、结构简单,由于大部分的工作就是基于底层的点线功能进行自绘,所有很多代码都是简洁明了,很少费话。
底层之上是一套以Fl_开头的类,代表了各种GUI构件,比如Fl_Window、Fl_Button、 Fl_Input等,使用起来很是容易。同时由于上面所说的,所有的界面构件都是画出来的,因此在熟悉了这种方式后,生成自己的构件也是很容易的,反正是画界面嘛,既然别人能做到,你也能做到,实在不行可以查阅源代码进行学习。这些界面类的共同特点是轻量型、都拥有一个draw(),只要在draw()里实现自己的绘画动作即可。
说到界面就不能不说其事件实现方式,对于FLTK而言,使用的是最直接的方法:while(1){}。这也是很多人批评FLTK原始的一个原因。但仔细想想,其实这是最直接的办法,不管是哪种平台,最终的事件方案不外乎是死循环和中断,中断的确具有很多好处,但只要while(1)能完成这部分的功能,那又有什么关系呢。每个界面类都有一个handle(int event),只要继承这个成员函数,就可以在其中处理自己的事务。是不是很简单?同时由于这样的事件方式,造成FLTK的刷新速度很快,事件反应迅速,也算是个附带优点了。现在大多数的开发库都是采用OO方式的事件处理方式,但FLTK却采用了最原始的函数指针方式,也算是一个异类,这可能和FLTK的 ...
阅读全文...
1
