随笔 - 16, 文章 - 0, 评论 - 55, 引用 - 0
数据加载中……

2014年4月29日

在windows下,当FLTK界面上包含中文的时候启动速度很慢,以下为修正过程

     摘要: 问题描述:
在windows下,当FLTK界面包含中文的时候,打开程序的时候会花费好几秒的时间才能完整显示界面

原因:
查了代码,最后发现原因在于绘制字符的时候通过GetTextExtentPoint32W这个函数获取字符宽度,由于这个函数本身速度不够快,所以FLTK使用缓存方式来保存宽度,问题在于缓存的方式不适合中文这种宽字符,当前的缓存方式是每当获取一个字符宽度时,把这个字符左右共1024个相邻字符的宽度提前获取并保存,以后每次获取字符宽度之前先搜索缓存,如果没有再通过API实际获取。

这个做法对于英文没有问题,因为GetTextExtentPoint32W处理英文的速度很快,而且一次获取1024个相邻字符基本就把程序可能会用到的字符全部囊括了,但是当界面出现中文的时候这种做法就出现问题了,中文的字符集是很大的,一次获取相邻个1024字符宽度并不能保证囊括了绝大多数的字符,所以每次界面显示之前都会花很多时间获取很多用不到的字符宽度,虽然显示一次之后的速度很快,但是启动程序的时候会出现卡顿

所以我做了修正,每当需要  阅读全文

posted @ 2014-04-29 17:28 cyantree 阅读(2018) | 评论 (0)编辑 收藏