目录

一、编译

二、中文显示如何处理:

2.1在发文2天前突然发现,我这个界面显示英文出现问题了,开始我的搜索之旅,一些参考页面有碰到问题也可以看看:

2.2、 那就开始翻翻官方自带的例程吧,看看他如何显示的吧,能够解决显示问题的方案之一我翻到了测试程序如图:

三、决定要放弃使用FLTK这个开源项目的时候:

3.1、通过2-3天的测试研究后决定放弃这个项目。

3.2、完美解决这windows下开发中文软件的终极方法通过多日艰苦搜寻总算有眉目了过程如下:

3、终极武器,编译器入手。也是本文重点和最终解决方案:


笔者最近准备做一个vs下开发c++工程,界面开发一直是我不太理想的弱项,本着造轮子不如找轮子的精神,为了向那些开源的大牛们学习一下技术,搜了下网上综合考虑了下准备使用ftlk开源项目作为界面编写的组件。

过程中充满了曲折,我太低估了编译fltk项目的难度,以为vs建一个空项目把源码拉进去哗哗修改一下库包含文件关系或设置路径即可集成入自己项目,结果折腾了1周编译无数错误排除掉了,在链接那边还是各种问题。还是老老实实的按说明书编译一个lib文件来用。先说说编译的步骤和注意要点。

一、编译

1、前往fltk官方网页下载一个最新版本的fltk源码程序,本文写作之时最新的库发行版本号是1.3.8官方下载的地址是:Download - Fast Light Toolkit (FLTK)

1.3.8版本是发行版本,(注意:后续fltk-1.4.x-20230526-4c057c57是最新版本没有提供vs下的工程要自己通过cmake建立一下,https://download.csdn.net/download/lyfwwb/87835107,放在fltk-1.4代码包中即可环境我用vs2017,源码包请自行到官网下载后解压出来,将我的工程文件下载下来解压到FLTK-1.4.x目录中找到.sln文件打开就可以了)。有需要用的朋友也通过上面链接或百度等其他方式下载到源码。解压后得到一个fltk-1.3.8的源码目录。就是我们要项目了,找到flt-1.3.8目录下ide\VisualC2010目录找到fltk.sln用你的vs打开升级后编译就可以了默认只有win32模式没有64位的模式,有需要的朋友可以自行配置。

一些例子的图片也出来了:如下

满心欢喜开始开发之旅。就着这些例子写写需要的程序应该没有什么问题。

二、中文显示如何处理:

2.1在发文2天前突然发现,我这个界面显示英文出现问题了,开始我的搜索之旅,一些参考页面有碰到问题也可以看看:

FLTK 1.3中使用中文_fltk 中文_thy38的博客-CSDN博客

如何巧妙解决FLTK不支持中文字符的问题_百度知道

等等看了不少也没有解决我的问题,始终显示如下:

2.2、 那就开始翻翻官方自带的例程吧,看看他如何显示的吧,能够解决显示问题的方案之一我翻到了测试程序如图:

可爱的中文显示出来了,我们看看源码如下:


int main(int argc, char** argv)
{int l;const char *latin1 = "\x41\x42\x43\x61\x62\x63\xe0\xe8\xe9\xef\xe2\xee\xf6\xfc\xe3\x31\x32\x33";char *utf8 = (char*) malloc(strlen(latin1) * 5 + 1);l = 0;//   l = fl_latin12utf((const unsigned char*)latin1, strlen(latin1), utf8);l = fl_utf8froma(utf8, (strlen(latin1) * 5 + 1), latin1, strlen(latin1));make_font_chooser();extra_font = FL_TIMES_BOLD_ITALIC;/* setup the extra font */Fl::set_font(extra_font,
#ifdef WIN32" Arial Unicode MS"
#elif defined(__APPLE__)"Monaco"
#else"-*-*-*-*-*-*-*-*-*-*-*-*-iso10646-1"
#endif);main_win = new Fl_Double_Window (200 + 5*75, 400, "Unicode Display Test");main_win->begin();Fl_Input i1(5, 5, 190, 25);utf8[l] = '\0';i1.value(utf8);Fl_Scroll scroll(200,0,5 * 75,400);int off = 2;int end_list = 0x10000 / 16;if (argc > 1) {off = (int)strtoul(argv[1], NULL, 0);end_list = off + 0x10000;off /= 16;end_list /= 16;}argc = 1;for (long y = off; y < end_list; y++) {int o = 0;char bu[25]; // index labelchar buf[16 * 6]; // utf8 textint i = 16 * y;for (int x = 0; x < 16; x++) {int l;l = fl_utf8encode(i, buf + o);if (l < 1) l = 1;o += l;i++;}buf[o] = '\0';sprintf(bu, "0x%06lX", y * 16);Fl_Input *b = new Fl_Input(200,(y-off)*25,80,25);b->textfont(FL_COURIER);b->value(strdup(bu));b = new Fl_Input(280,(y-off)*25,380,25);b->textfont(extra_font);b->value(strdup(buf));}scroll.end();main_win->resizable(scroll);thescroll = &scroll;char *utf8l = (char*) malloc(strlen(utf8) * 3 + 1);Fl_Input i2(5, 35, 190, 25);l = fl_utf_tolower((const unsigned char*)utf8, l, utf8l);utf8l[l] = '\0';i2.value(utf8l);char *utf8u = (char*) malloc(strlen(utf8l) * 3 + 1);Fl_Input i3(5, 65, 190, 25);l = fl_utf_toupper((const unsigned char*)utf8l, l, utf8u);utf8u[l] = '\0';i3.value(utf8u);const char *ltr_txt = "\\->e\xCC\x82=\xC3\xAA";Fl_Input i4(5, 90, 190, 25);i4.value(ltr_txt);i4.textfont(extra_font);wchar_t r_to_l_txt[] = {/*8238,*/ 1610, 1608, 1606, 1604, 1603, 1608, 1583, 0};char abuf[40];//  l = fl_unicode2utf(r_to_l_txt, 8, abuf);l = fl_utf8fromwc(abuf, 40, r_to_l_txt, 8);abuf[l] = 0;right_left_input i5(5, 115, 190, 50);i5.textfont(extra_font);i5.textsize(30);i5.value(abuf);Fl_Input i7(5, 230, 190, 25);Fl_Input i8(5, 260, 190, 25);i7.callback(i7_cb, &i8);i7.textsize(20);i7.value(abuf);i7.when(FL_WHEN_CHANGED);wchar_t r_to_l_txt1[] = { /*8238,*/ 1610, 0x20, 1608, 0x20, 1606, 0x20,  1604, 0x20, 1603, 0x20, 1608, 0x20, 1583, 0};//  l = fl_unicode2utf(r_to_l_txt1, 14, abuf);l = fl_utf8fromwc(abuf, 40, r_to_l_txt1, 14);abuf[l] = 0;right_left_input i6(5, 175, 190, 50);i6.textfont(extra_font);i6.textsize(30);i6.value(abuf);// Now try Greg Ercolano's Japanese test sequence// SOME JAPANESE UTF-8 TEXTconst char *utfstr = "\xe4\xbd\x95\xe3\x82\x82\xe8\xa1""\x8c\xe3\x82\x8b\xe3\x80\x82"; UCharDropBox db(5, 300, 190, 30);db.textsize(16);db.value("unichar drop box");Fl_Output o9(5, 330, 190, 45);o9.textfont(extra_font);o9.textsize(30);o9.value(utfstr);main_win->end();main_win->callback((Fl_Callback*)cb_exit);fl_set_status(0, 370, 100, 30);main_win->show(argc,argv);fnt_chooser_win->show();int ret = Fl::run();// Free up the sizes arrays we allocatedif(numsizes) {delete [] numsizes;}if(sizes) {delete [] sizes;}return ret;
}

看样子能解决问题,找出自己的编码写进去就可以了吧,管方例程未做修改,好了我们在这段代码中应该就提取出来的代码,自己修改修改可以搞定了。做到这边我基本上就要决定要么封装一下自己的函数,要么就放弃这开源项目,另外找一个诸如QT这样的强大库来使用的状态。

有耐心的朋友可以抠一下以下代码应该有所收获:(上面代码段抄出来)

int off = 2;int end_list = 0x10000 / 16;if (argc > 1) {off = (int)strtoul(argv[1], NULL, 0);end_list = off + 0x10000;off /= 16;end_list /= 16;}argc = 1;for (long y = off; y < end_list; y++) {int o = 0;char bu[25]; // index labelchar buf[16 * 6]; // utf8 textint i = 16 * y;for (int x = 0; x < 16; x++) {int l;l = fl_utf8encode(i, buf + o);if (l < 1) l = 1;o += l;i++;}buf[o] = '\0';sprintf(bu, "0x%06lX", y * 16);Fl_Input *b = new Fl_Input(200,(y-off)*25,80,25);b->textfont(FL_COURIER);b->value(strdup(bu));b = new Fl_Input(280,(y-off)*25,380,25);b->textfont(extra_font);b->value(strdup(buf));}scroll.end();

三、决定要放弃使用FLTK这个开源项目的时候:

3.1、通过2-3天的测试研究后决定放弃这个项目。

不错,10多天的研究一无所获,编译一周解决问题没有什么好说的,开源项目基本上多多少少碰到首次编译问题,浪费就浪费了,毕竟官方给出的方案也是不强改没有问题,老老实实按官方步骤可保无虞。现在是中文的程序开发界面显示出现比较大难题,放弃也属正常。

又开始我在网上查找的新旅程,一番查找一无所获。没有找到我想要的理想的界面库估计和知识面有关。哀叹自己的知识能力不足时,心里也挺纠结。反复研究是否有突破。

3.2、完美解决这windows下开发中文软件的终极方法通过多日艰苦搜寻总算有眉目了过程如下:

1、首先是不断通过搜索引擎查找相关文章看看是否提供相关的灵感。结果让我失望了。强大的搜索引擎也有不找不到的时候。谷歌没法上不知道结果。

2、翻看fltk测试程序例子。无果。

3、终极武器,编译器入手。也是本文重点和最终解决方案:

(1)、通过反复测试和编写查找相关文档最后完美的解决中文输出问题的就是一条编译指令:

#pragma execution_character_set("utf-8")

如果出现编译错误是下图C3437错误那么就是否检查了第2个方式设置过了,就不需要这行代码了。

(2)、在工程中属性中编译选项中设置如图在FLTK1.4.X版本也已经设置好了,自己建立工程时候可以参考:

至此我们的fltk工程就可以在windows下编程正确显示中文了。值此文章献给需要fltk工程又碰到类似难题的编程朋友。对您有用不妨点个赞再走。

浅谈如何fltk项目编译和实现显示中文相关推荐

  1. java编译异常和运行时异常_浅谈异常结构图、编译期异常和运行期异常的区别...

    异常处理一般有2种方式,要么捕获异常try-catch,要么抛出异常throws 如果一个方法后面抛出一个运行时期异常(throws RuntimeException),调用者无须处理 如果一个方法后 ...

  2. 广积粮,缓称王——浅谈区块链项目的护城河

    广积粮,缓称王--浅谈区块链项目的护城河这里写自定义目录标题 最近,一个二次元视频网站项目火遍圈内,上线即暴跌.把各类投资者割的找不着北了.又一个拥有"强大"社区的项目上演见光死, ...

  3. python表格对齐_浅谈python str.format与制表符\t关于中文对齐的细节问题

    写了一个练手的爬虫...在输出的时候出现了让人很不愉♂悦的问题 像这样: 令人十分难受啊! #------------------------------------------ 在此之前先说一下py ...

  4. python制表符对齐_浅谈python str.format与制表符\t关于中文对齐的细节问题

    写了一个练手的爬虫...在输出的时候出现了让人很不愉♂悦的问题 像这样: 令人十分难受啊! #------------------------------------------ 在此之前先说一下py ...

  5. 关于python格式对齐的问题_[宜配屋]听图阁 - 浅谈python str.format与制表符\t关于中文对齐的细节问题...

    写了一个练手的爬虫...在输出的时候出现了让人很不愉♂悦的问题 像这样: 令人十分难受啊! #------------------------------------------ 在此之前先说一下py ...

  6. 浅谈虚拟内存与项目开发中的OOM问题

    这是[游戏开发那些事]第55篇原创 文章中关于Windows平台虚拟内存的部分内容转自知乎用户 "南京周润发" 内存管理是操作系统中极为核心且重要的内容,也是游戏开发者极为头痛的问 ...

  7. 浅谈Log4net在项目中如何记录日志

    一    引入背景 在软件开发周期中,无论是开发中,或是测试中,或是上线后,选择合适的工具监控程序的运行状态至关重要,只有如此,才能更好地排查程序问题和检测程序性能问题等.本篇文章主要与大家分享,如何 ...

  8. 浅谈软件开发项目的质量控制

    一.引言 J.M.Juran认为质量控制是一个常规的过程,通过它度量实际的质量性能并与标准比较,当出现差异时采取行动.由此,DonaldReifer 给出软件质量控制的定义:软件质量控制是一系列验证活 ...

  9. 回顾知识付费近几年的发展历程,浅谈知识付费项目的发展空间

    不知道大家有没有感觉到今年的时间过得特别快,2021年的新年钟声已经敲响了,新的一年你会有什么新的愿望呢?回忆过去的同时,我们也要展望未来. 尽管2020年对于我们大家来说是非常艰难的一年,新冠至今还 ...

最新文章

  1. ifelse的命令空间
  2. 【组队学习】【31期】水很深的深度学习
  3. 单分子测序技术精准解析复杂结构变异
  4. java增删改查实例源码_Spring Data JPA 实现简单的CRUD增删改查源码案例
  5. Could not import extension sphinxcontrib.blockdiag (exception: No module named sphinxcontrib.blockdi
  6. spring bean的生命周期和创建流程
  7. ubuntu下vim的命令及使用方法
  8. Element-UI-快速入门(极简教程)
  9. antd confirm如何隐藏ok按钮_操作系统如何保护重要文件,Windows 7资源管理器设置隐藏文件夹...
  10. tmux new-s 远程连接服务器,断网断连接程序运行不断
  11. MATLAB 自带RS编码函数中 gf 数据转化为 double 数组的方法
  12. 窥探PTAM之模板搜索
  13. U盘存储设备有回收站吗及如何快速恢复u盘数据
  14. 联想win7旗舰版忘记开机密码--有效处理办法
  15. reactjs simple text editor
  16. 神经网络与深度学习期末考试满分过题库!
  17. 蓝牙打开和搜索并显示在列表
  18. ios调用微信支付提示当前页面的URL未注册
  19. 开运算和闭运算的作用
  20. win10修改系统配置处理器引导参数后,系统无限蓝屏解决办法

热门文章

  1. C4D模型工具—细分
  2. bitmap index的优化案例
  3. MacBook Air M2无需虚拟屏启用Hidpi+任意缩放(22年9月)
  4. python调用ansys
  5. 风控评分卡模型——逻辑回归
  6. 海洋cms新手入门安装配置教程
  7. QT Designer使用入门
  8. 如何自己在家手动制作网线
  9. 单例模式的适用场景包括:
  10. 【工具】---cachecloud使用