中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-01 20:45
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » dos字体问题 查看 2,588 回复 11
楼 主 dos字体问题 发表于 2006-09-20 05:13 ·  中国 北京 丰台区 联通
初级用户
积分 25
发帖 9
注册 2006-04-01 08:53
20年会员
UID 53148
性别 男
状态 离线
我在做程序的图形界面的时候,要用到许多不同的字体,这些字体windows都有,比如仿宋,新魏,等等,我想问问大家dos下运行的程序(16位,32位的都行),有没有方便些的字体解决方案,实现windows字体的显示。谢谢
2 发表于 2006-09-20 07:37 ·  中国 北京 丰台区 联通
初级用户
积分 25
发帖 9
注册 2006-04-01 08:53
20年会员
UID 53148
性别 男
状态 离线
希望看到本贴的朋友能帮顶一下,如果觉得这个问题很幼稚,那也请您在百忙之中,点拨一二,也许您的几句话就帮了我很大的忙。谢谢了
3 发表于 2006-09-20 12:09 ·  中国 江苏 苏州 电信
银牌会员
★★★
积分 2,227
发帖 790
注册 2005-01-27 00:00
21年会员
UID 35703
性别 男
状态 离线
请到汉化版找“本是”在VGA文本汉字显示的贴子里提供过!
my major is english----my love is dos----my teacher is the buddha----my friends--how about U
4 发表于 2006-09-22 11:06 ·  中国 广东 广州 白云区 电信
金牌会员
★★★★
D◎$ Fαп
积分 4,562
发帖 1,883
注册 2004-01-19 00:00
22年会员
UID 15812
性别 男
来自 广东广州
状态 离线
DOS下的16*16点阵中文字只有默认的宋体字最好看
----====≡≡≡≡ 我的至爱,永远是MSDOS!≡≡≡≡====----
5 发表于 2006-09-22 20:56 ·  中国 北京 联通
初级用户
积分 25
发帖 9
注册 2006-04-01 08:53
20年会员
UID 53148
性别 男
状态 离线
首先非常感谢两位高手的回答,不过我想知道的是一些原理性的东西,或者一个具体的方案,比如我现在正着手的一个方案是,像vb的picturebox控件中用我想要的windows字体写入所有ascII码字符,然后逐个扫描,生成该字体的所有ascII字模。其实总结一下,我的问题就是,希望大家给提供一些,生成字模的方案,或者你曾经实现的思路。谢谢
6 发表于 2006-09-22 21:15 ·  中国 北京 联通
初级用户
积分 25
发帖 9
注册 2006-04-01 08:53
20年会员
UID 53148
性别 男
状态 离线
对了顺便说一下,我用picturebox控件生成字模的时候,有个地方感觉很别扭,就是字体大小的问题,由于要逐个扫描picturebox中的字符,所以关键的一点是要知道该种字体字符占多少像素,比如16*16或32*32,但是windows字体大小的单位都是磅,所以我的办法是,扫描一个字符,然后测出它的长宽边界,用这个边界做为以后显示和扫描的字体长宽像素值,我总感觉这种办法挺别扭的,希望大家也给指点一下。
7 发表于 2006-09-22 21:52 ·  中国 湖南 长沙 电信
中级用户
★★
积分 282
发帖 126
注册 2006-05-17 22:29
20年会员
UID 55724
状态 离线
1 缇 = 1/1440 英寸
1 磅 = 1/72 英寸 = 20 缇

但将这些单位化为像素就比较复杂了:
水平方向1英寸= GetDeviceCaps(hDC, LOGPIXELSX) 像素
垂直方向1英寸= GetDeviceCaps(hDC, LOGPIXELSY) 像素

GetDeviceCaps是一个GDI API,用于得到DC的属性
hDC是你绘图所用的DC,如: Picture1.hDC


所以字体高度一般是这样计算的:
lfHeight = PointSize * GetDeviceCaps(hDC, LOGPIXELSY) / 72


由于Screen对象的TwipsPerPixelX、TwipsPerPixelY属性可以得知一像素是多少缇,所以可以这样计算:
lfHeight = PointSize * 20 / Screen.TwipsPerPixelY
人类存在的目的就是试图理解人类为何存在
8 发表于 2006-09-22 22:05 ·  中国 湖南 长沙 电信
中级用户
★★
积分 282
发帖 126
注册 2006-05-17 22:29
20年会员
UID 55724
状态 离线
文本排版是很复杂的

用GetTextMetrics可以取得当前字体的排版信息,GetOutlineTextMetrics可以进一步得到TTF字体的排版信息
GetCharABCWidths、GetCharABCWidthsFloat可以的到字体的左右悬挂属性,用于非等宽字体或斜体状态,可以使一个一个字符的某一部分位于另一个字符的单元格内,如: fffffff
用GetTextExtentPoint32计算一字符串在该DC绘制后所占的尺寸
人类存在的目的就是试图理解人类为何存在
9 发表于 2006-09-25 07:12 ·  中国 北京 海淀区 联通
初级用户
积分 25
发帖 9
注册 2006-04-01 08:53
20年会员
UID 53148
性别 男
状态 离线
非常感谢,恕我愚钝,没看太懂,我再研究研究你的帖啊 ,谢谢啊
10 发表于 2006-11-01 10:32 ·  中国 浙江 嘉兴 海宁市 电信
初级用户
积分 118
发帖 10
注册 2004-06-15 00:00
22年会员
UID 26789
性别 男
状态 离线
自己做个专用的字库和写字函数,或者自己设计CHR字体。
偶有一个制作CHR字库的软件,可制中文的CHR字库,不过每个文件最多只能放255个汉字。
11 发表于 2006-11-01 10:34 ·  中国 浙江 嘉兴 海宁市 电信
初级用户
积分 118
发帖 10
注册 2004-06-15 00:00
22年会员
UID 26789
性别 男
状态 离线
如果你自己做字库,请先决定做等宽的字体还是做变宽的,实现起来大不相同啊。
12 发表于 2006-11-01 10:34 ·  中国 浙江 嘉兴 海宁市 电信
初级用户
积分 118
发帖 10
注册 2004-06-15 00:00
22年会员
UID 26789
性别 男
状态 离线
回复完了才发现是stone,呵呵
论坛跳转: