成段文字输出换行问题

在界面输出成段文字时,当一行不能输出所有的文字时就需要手动换行,如果全是中文字串,那么只要在该行结束时就强制换行,这不会造成什么麻烦,但是如果输出的是英文,或恰恰在该行结束处是一个英文单词或一串数字的中间,那么强制换行就会导致这个英文单词和数字被强制断开,在两行显示,这显然是不恰当的,容易引起歧义,那么这个问题应该怎么解决呢?

经过研究我觉得最理想的方法是参考WORD的处理流程,我发现他的处理方式如下,如果结束处是一个英文或一串数字,那么将换行符向前移动,找到一个空格或一个非英文字母或数字的地方,然后将英文单词或数字整体移到下一行显示,并且当前行扩大字符间距,使得该行输出充满整行,保持美观。综合起来就是两个过程,一个是决定换行符的位置,一个是将当前行的输出充满整行,下面对其进行详细设计。

 

一、换行符位置的确定

       根据输出的区域,计算出需要换行的位置,取出当前字符,判断是否为英文或数字,如果是,则向前找到一个非英文或数字的字符(要注意小数中也有非英文字符哦),然后在后面插入换行符。

       最近在研究意大利版本的软件,我发现意大利与用到了0x80-0xFF中很多字符,所以我暂时将0x80-0xFF都当成了类似英文或数字,中间不能断开,我也知道不对,但是当前也不知道怎么处理,暂且如此吧!

二、调整当前行的输出

这个其实很简单,只要调整字符间距即可达到目的,但是如果是英文或数字调整其字符间距不太合适,参考WORD如果是英文或数字则不调整其字符间距,只调整其前后的空格的间距。

 

研究了这么多,突然发现有一个API函数能够达到自动换行,并且不强制隔断数字或英文单词的功能,那就是DrawText,经过测试,完全能够满足设计1的所有的功能,但是他也有缺陷,就是无法调整行间距,如果字体比较小的话还是很难看的,所以最终我还是选择了我上面的方案。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值