ubuntu下实现fltk1.3.2的中文界面

最近琢磨着做一个跨平台的有界面的软件,google过程中发现一个轻量级跨平台GUI库fltk,看文档发现入门及其简单,小小兴奋了一阵,俺马上就能写一次代码,但是可以横跨mac linux和windows的超级软件来啊。

但是在折腾时发现一个问题,很多人说fltk显示中文有问题,兄弟我面对的用户都是土鳖,没中文肯定不行啊。仔细看资料,说fltk1.3已经支持uncode和utf8,应该没问题啊。于是自己写段代码测试下,发现真的显示不出中文。网上很多文章的中文都是在Windows下,在linux下还没有文章介绍如何处理中文。经过一番斗争,终于搞定,写个开篇记录一下,也给后来的兄弟参考参考。

具体过程是这样,我安装的ubuntu12.04中文版,操作系统本身的操作界面都是中文。在这个环境下安装fltk1.3.2,编译过程很顺利,无非是configure,make,在test目录下成功生成一堆例子,挨个跑跑,感觉速度很快很开心。

参考这个链接:http://www.cppblog.com/cyantree/archive/2012/05/13/174761.html 写了个例子sample.cxx程序,成功运行。于是兴冲冲把代码里的英文改成汉字,代码如下:

#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Button.H>
using namespace std;

//--------------------------------------------
void but_cb( Fl_Widget* o, void*  ) {
   Fl_Button* b=(Fl_Button*)o;
   b->label("干的好"); //redraw not necessary
   b->resize(10,150,140,30); //redraw needed
   b->redraw();
}

//-------------------------------------------- 
int main() {
    Fl_Window win( 300,200,"测试" );
    win.begin();
       Fl_Button but( 10, 150, 70, 30, "点我" );
    win.end();
    but.callback( but_cb );
    win.show();
    return Fl::run();
} 
用fltk-config进行编译,运行目标程序,很不幸发现Button上的汉字都变成了方块。

细心的朋友可能会发现,窗体标题栏的“测试”两个字是正确的,仅仅Button上的汉字是方块,这个问题放下,咱们先解决Button上的问题。

一番粗暴google,发现了这么几篇文章可以参考:

http://stackoverflow.com/questions/11948307/how-to-make-fltk-1-3-0-support-chinese-in-ubuntu-linux

http://blog.csdn.net/thy38/article/details/6132947

http://blog.sina.com.cn/s/blog_494e45fe0100092l.html

貌似是编码问题,于是修改了很多地方的编码设置,还是无果。硬着头皮看看源码,还是找不到问题。

就在一片迷茫的时候,把fltk中自带utf8例子跑跑,发现该例子中文也是乱码,但是日文确是正确的,NND小日本。

于是我想,也许,可能,是字体问题,死马当作活马医吧,把utf8中的日文换成了中文,运行之,Great!中文显示出来了!一时热泪盈眶啊!


问题确定了后面就好办了,把utf8中设置字体的代码抠出来,放到我的sample.cxx中,代码如下:

#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Button.H>
using namespace std;
static Fl_Font extra_font;

//--------------------------------------------
void but_cb( Fl_Widget* o, void*  ) {
   Fl_Button* b=(Fl_Button*)o;
   b->label("干的好"); //redraw not necessary
   b->labelfont(extra_font);
   b->resize(10,150,140,30); //redraw needed
   b->redraw();
}

//-------------------------------------------- 
int main() {
    int i = 0;
    int k = Fl::set_fonts(i ? (i>1 ? "*" : 0) : "-*");

    int font_idx = 18;
    int font_type;
    const char* name = Fl::get_font_name((Fl_Font)font_idx, &font_type);
    printf("idx %d\nUser name :%s:\n", font_idx, name);
    extra_font = FL_TIMES_BOLD_ITALIC;
    Fl::set_font(extra_font, (Fl_Font)font_idx);

    Fl_Window win( 300,200,"测试" );
    win.begin();
       Fl_Button but( 10, 150, 70, 30, "点我" );
       but.labelfont(extra_font);
    win.end();
    but.callback( but_cb );
    win.show();
    return Fl::run();
}
运行结果如下:



至此,用fltk写的界面顺利在ubuntu下显示中文。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值