MiniGUI TTF旋转字库制作并竖直显示文字

一. 制作TTF旋转字库

1.下载fontforge,可以在Ubuntu软件中心下载

FontForge

2. 用该软件打开字库之后,按ctrl+a全选文字

全选文字

3.点击上面工具栏的基础–>变换–>如图设置

变换
需要注意的是

  1. 需要选择字形原点,不能按选中部分的中心旋转,不然会导致汉字与数字和英文显示的高度不在同一水平线上,如果按选中部分的中心旋转,第3步换成第4步
  2. 需要选择顺时针旋转90度,如果逆时针旋转90度的话,文字显示会由“你好”变成“好你”,并且对齐方式是向右对齐,需要做一些额外的处理
  3. 需要选择向Y轴移动220个单位,不同字体可能需要移动的数字不同,可以在MiniGUI中用TextOut函数设置y的值为0,看文字是否显示在y为0的位置上,动态调试
  4. 第2步旋转之后,只选择数字和英文,点击基础–>变换,选择字形原点,选择向Y轴移动100个单位,之后点击尺寸–>设置左边位,设置好数值,然后在MiniGUI中观看效果,动态调试
  5. 因为MiniGUI的TextOut,DrawText函数不支持竖直输出文本,需要修改MiniGUI源码,使文字竖直输出

这里对上面的一些概念做一些说明,还没有旋转之前
概念描述
当按中心旋转之后,左边位变成-25,所以需要调整左边位,不然数字与汉字显示不在同一水平线上,因为汉字宽高都是256,所以汉字不需要调整左边位
按中心旋转
当按原点旋转之后,Y轴距离变大了很多,所以需要向上移动一定的距离,不然文字显示的时候会空出一些,因为是按原点旋转,汉字与数字可以显示在同一水平线上,因此可以不用改动左边位,但是我们也可以看到,左边位也是变小了,也可以根据需要修改
按原点旋转

4.文件–>生成字体–>TrueType

生成字体

二. MiniGUI竖直显示文本

主要是把下一次输出的x,y轴的坐标对换就可以了,新增Align

描述
TA_HORIZONTAL 水平输出
TA_HORIZONTAL_UT 水平输出,字库旋转180度
TA_VERTICAL_CW 竖直输出,字库顺时针旋转
TA_VERTICAL_CCW 竖直输出,字库逆时针旋转

SetTextAlign只影响当前hdc,对其他界面无影响
在调用TextOut和TabbedTextOut函数之前调用SetTextAlign(hdc,TA_VERTICAL_CW),调用SetTextAlign(hdc,TA_HORIZONTAL)可以恢复该hdc为水平输出文字

DrawText不受SetTextAlign的影响,新增Align

描述
DT_HORIZONTAL_UT 水平输出,字库旋转180度
DT_VERTICAL_CW 竖直输出,字库顺时针旋转
DT_VERTICAL_CCW 竖直输出,字库逆时针旋转

在调用DrawText的时候可以指定文字输出风格,不指定这两个风格为水平输出

为什么需要区分字库顺时针旋转和逆时针旋转,这里主要涉及到换行的问题,水平输出的情况下,换行是Y轴加一个字的高度。竖直输出,字库顺时针旋转的情况下是X轴减少一个字的高度。竖直输出,字库逆时针旋转的情况下是X轴增加一个字的高度,并且需要注意,想要输出“你好啊”,源字符串需要是“啊好你”,如果是两行的话,还需要向右对齐,当然MiniGUI中是支持双向文本的,补丁中已经做好了支持,具体效果如下,以下的字符串都是“测试文本\nABCDEFGHIGK”
文本位置
文本位置
TextOut和TabbedTextOut指定了TA_VERTICAL_CCW之后,字符串也是不用手动逆转
原本DrawText指定DT_RIGHT和竖直输出文本之后,位置和设定的位置会有偏差,补丁中也已经修复
需要注意的是DrawText指定竖直输出后,DT_BOTTOMDT_VCENTERDT_CENTER不能再使用

使用示例如下

	case MSG_PAINT: {
   
		HDC hdc = BeginPaint(hWnd);
		
		SetTextAlign(hdc,TA_VERTICAL_CW);
		TextOut(hdc, 10, 150, "你好啊");
		TabbedTextOut(hdc,200,300,"你好啊");
		
		RECT rcClient;
		rcClient.left = 10;
		rcClient.top = 240;
		rcClient.right = 400;
		rcClient.bottom = 400;
		
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值