转载:http://blog.csdn.net/jianlizhao66/article/details/1480457

我们获得了每个字形的宽度数组piAdvances,以及这个RUN所占用的总宽度abc。

piVdvances对应于每个字符,它取得了每个字形所占用宽度。

如果我们以行为单位来绘制文字,我们可以以一个循环来取得每个RUN的宽度信息,并一直相加,假设我们己取得了一些run的宽度和,假设这个宽度和为LineWidth.当我们再取得链表中下一个run的宽度(假设为lo)与这个宽度相加后超过一个行的宽度。我们假设这个run的索引为n即在链表中的节点顺序由头节点向后遍历的顺序为第n个。

我们可以中断这个run即把这个run分为两个run,所谓划分实际上也就是把这个run的字符分为两部分。

可以这样实现:

hr = ScriptGetLogicalWidths(&pRun->analysis,

pRun->iLen,

cGlyphs,

piAdvances,

pClusters,

pVisattrs,

logwidths);

ScriptGetLogicalWidhts函数转换一个指定字体的字形向前宽度为逻辑宽度。

HRESULT WINAPI ScriptGetLogicalWidths(
 const SCRIPT_ANALYSIS *psa,
 int cChars,
 int cGlyphs,
 const int *piGlyphWidth,
 const WORD *pwLogClust,
 const SCRIPT_VISATTR *psva,
 int *piDx,
);

psa

[in]一个 SCRIPT_ANALYSIS 结构指针.

cChars

[in] 在RUN中的逻辑编码点数量

cGlyphs

[in] 在一个RUN中的字形数量

piGlyphWidth

[in] 字形向前宽度的数组指针

pwLogClust

[in] 逻辑Cluster的数组指针

psva

[in] SCRIPT_VISATTR 结构指针

piDx

[out] 逻辑宽度的数组指针

可以看出这个函数的最后一个参数为输出参数,它代表逻辑宽度的数组。即每个字形所占用的宽度数组。

然后我们可以以一个循环来判断具体到哪个字符时满足不超过窗口宽度的条件。

iChars = 0;

iWidth = 0;

while(iChars < pRun->iLen && iWidth + logwidths[iChars] < iMaxWidth)

{

iWidth += logwidths[iChars];

iChars++;

}

pRun代表我们当前的run。iWidth代表当前run中某个字符的逻辑宽度,iMaxWidth代表窗口剩余的宽度即剩余了iMaxWidth的宽度,但这个宽度不足以显示这个run.

通过上面这个循环,我们找到了这个字符的位置。

if(iChars < pRun->iLen )

{

pNewRun     = new RUN;

*pNewRun    = *pRun;

pRun->pNext = pNewRun;

pRun->iLen = iChars;

pNewRun->iLen -= iChars;

}

我们已经划分了这个RUN。

第二步已经完成,总结第二步,主要目的是确定一行(窗口宽度)要显示多少个RUN,并进行相应的划分。

Uniscribe文字自动换行相关推荐

  1. 使用echart的雷达图的时候,如果文字越界的解决办法记录,标签文字自动换行

    使用echart的雷达图的时候,如果文字越界的解决办法记录,标签文字自动换行 前几天项目中有一个图表的是用echart生成的,遇到一个问题,就是在手机端显示的售时候,如果文字太长就会超出div,之前的 ...

  2. html复制粘贴的文字自动换行,如何解决Word中粘贴网页上的文字自动换行的现象...

    在网页上复制了一段文字,粘贴到Word中的时候,却发现文字自动换行了,好好的一段话被回车在中间断的非常乱,这是什么原因呢,怎么取消Word粘贴时的自动换行呢? 问题出现的原因: 出现这种情况,大多不是 ...

  3. speedoffice(Excel)表格怎么设置文字自动换行呢?

    相信大家都有遇到过,做表格时,有时候输入一个比较长的语句时,默认情况下,文字会超出单元格的边界,那么怎么设置自动换行呢? 选中一个单元格,并在对应单元格里面输入较多的文字. 在"主页&quo ...

  4. CSS - label文字自动换行

    让lable里的文字自动换行可在包裹label的div元素css加上这个属性: white-space:pre-wrap: // 可换行 html: <div class="box&q ...

  5. css过长文字自动换行

    2019独角兽企业重金招聘Python工程师标准>>> /*过长文字自动换行*/         td.long-text > div{             width:i ...

  6. html怎样让文字自动换行,CSS怎么设置文字自动换行?

    CSS怎么设置文字自动换行?下面本篇文章就给大家介绍css设置文字(特别是连续的数字和英文)自动换行的方法.有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. 关于换行问题,正常字符的换 ...

  7. Notepad++ 设置文字自动换行

    Notepad++ 设置文字自动换行 1. 视图 -> 自动换行 2. 在输入的文字抵达边界时,下一个字符将会自动换到下一行进行显示 References https://yongqiang.b ...

  8. html怎样让文字自动换行,css中文字自动换行如何实现

    css中文字自动换行如何实现 在div css布局中,遇到连续英文字母或连续数字在div.p.h2.h1等盒子里排成一排显示不会自动随盒子宽度限制而自动换行. 当然中文字在DIV或任意盒子中均会自动换 ...

  9. canvas绘制海报中文字自动换行

    canvas:canvas绘制海报中文字自动换行 问题描述 canvas绘制的海报在某一行文字过多时不会自动换行(设置文本宽度无用) 源代码 context.fillText(this.data.go ...

  10. 系统较低的Android手机文字自动换行差异 CSS调整

    系统较低的Android手机文字自动换行差异 文字没沾满宽度就会自动换行包括文字,英文 1.宽度固定: 2.word-break:break-all;(英文一个完整词不会自动换行,不要此段CSS 如图 ...

最新文章

  1. 原创关于python中的一些坑点
  2. JDK源码分析——Java的SPI机制分析与实战
  3. EOS账户系统(4)账户权限分级
  4. 浅谈C++类(7)--析构函数
  5. 【Flink】flink并行度与kafka分区(partition)设置
  6. 他人笑我太疯癫 我笑他人看不穿
  7. Spring-aop-AnnotationAwareAspectJAutoProxyCreator类
  8. python入门指南-Python完全小白入门指南
  9. java 修改final_Java反射有效修改final属性值
  10. 最新修复版微信H5漂流瓶V2.0更新版本 社交漂流瓶H5源码
  11. 播音主持必练的绕口令
  12. Three.js 3D 动画场景搭建
  13. 墙裂推荐,Python开发者不容错过的7个VS Code扩展
  14. 真彩色图像数据量 计算_计算机基础:图形、图像相关知识笔记
  15. 【Python + selenium】在浏览器打开新页签
  16. Linux 进行yum 安装是出现文件 conflicts 解决方法
  17. python停止线程_python线程之八:线程停止的3种方式,5个实例
  18. 局域网在线设备扫描工具 v1.0
  19. Module named ‘XXX’ already exists 错误解决
  20. Thinkpad笔记本验机2

热门文章

  1. 电容式传感器位移性能试验报告_称重传感器的构成
  2. 百兆以太网口通信速率_千兆以太网的传输速度
  3. java类似keyvaluepair_BM25 算法的java实现,有详细的说明文档和代码 Develop 238万源代码下载- www.pudn.com...
  4. eclipse设置utf8编码_技术分享 | MySQL 8.0:字符集从 utf8 转换成 utf8mb4
  5. module.exports 和 exports 的区别
  6. 媒体查询以及flexbox,响应式图片
  7. 下一代终端保护六大支柱
  8. UT源码+105032014036
  9. 【好文翻译】二十年来我得到的20条编程经验
  10. struts2 tag if NumberFormatException