中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: dos字体问题 上一主题 | 下一主题
stone830209
初级用户





积分 25
发帖 9
注册 2006-4-1
状态 离线
『楼 主』:  dos字体问题

我在做程序的图形界面的时候,要用到许多不同的字体,这些字体windows都有,比如仿宋,新魏,等等,我想问问大家dos下运行的程序(16位,32位的都行),有没有方便些的字体解决方案,实现windows字体的显示。谢谢

2006-9-20 05:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
stone830209
初级用户





积分 25
发帖 9
注册 2006-4-1
状态 离线
『第 2 楼』:  

希望看到本贴的朋友能帮顶一下,如果觉得这个问题很幼稚,那也请您在百忙之中,点拨一二,也许您的几句话就帮了我很大的忙。谢谢了

2006-9-20 07:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
本是
银牌会员





积分 2201
发帖 789
注册 2005-1-27
状态 离线
『第 3 楼』:  

请到汉化版找“本是”在VGA文本汉字显示的贴子里提供过!



my major is english----my love is dos----my teacher is the buddha----my friends--how about U
2006-9-20 12:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
JonePeng
金牌会员

D◎$ Fαп


积分 4562
发帖 1883
注册 2004-1-19
来自 广东广州
状态 离线
『第 4 楼』:  

DOS下的16*16点阵中文字只有默认的宋体字最好看



----====≡≡≡≡ 我的至爱,永远是MSDOS!≡≡≡≡====----
  
2006-9-22 11:06
查看资料  发送邮件  发短消息 网志  OICQ (373343541)  编辑帖子  回复  引用回复
stone830209
初级用户





积分 25
发帖 9
注册 2006-4-1
状态 离线
『第 5 楼』:  

首先非常感谢两位高手的回答,不过我想知道的是一些原理性的东西,或者一个具体的方案,比如我现在正着手的一个方案是,像vb的picturebox控件中用我想要的windows字体写入所有ascII码字符,然后逐个扫描,生成该字体的所有ascII字模。其实总结一下,我的问题就是,希望大家给提供一些,生成字模的方案,或者你曾经实现的思路。谢谢

2006-9-22 20:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
stone830209
初级用户





积分 25
发帖 9
注册 2006-4-1
状态 离线
『第 6 楼』:  

对了顺便说一下,我用picturebox控件生成字模的时候,有个地方感觉很别扭,就是字体大小的问题,由于要逐个扫描picturebox中的字符,所以关键的一点是要知道该种字体字符占多少像素,比如16*16或32*32,但是windows字体大小的单位都是磅,所以我的办法是,扫描一个字符,然后测出它的长宽边界,用这个边界做为以后显示和扫描的字体长宽像素值,我总感觉这种办法挺别扭的,希望大家也给指点一下。

2006-9-22 21:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zyl910
中级用户





积分 282
发帖 126
注册 2006-5-17
状态 离线
『第 7 楼』:  

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



人类存在的目的就是试图理解人类为何存在
2006-9-22 21:52
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
zyl910
中级用户





积分 282
发帖 126
注册 2006-5-17
状态 离线
『第 8 楼』:  

文本排版是很复杂的

用GetTextMetrics可以取得当前字体的排版信息,GetOutlineTextMetrics可以进一步得到TTF字体的排版信息
GetCharABCWidths、GetCharABCWidthsFloat可以的到字体的左右悬挂属性,用于非等宽字体或斜体状态,可以使一个一个字符的某一部分位于另一个字符的单元格内,如: fffffff
用GetTextExtentPoint32计算一字符串在该DC绘制后所占的尺寸



人类存在的目的就是试图理解人类为何存在
2006-9-22 22:05
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
stone830209
初级用户





积分 25
发帖 9
注册 2006-4-1
状态 离线
『第 9 楼』:  

非常感谢,恕我愚钝,没看太懂,我再研究研究你的帖啊 ,谢谢啊

2006-9-25 07:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pcwawa
初级用户




积分 118
发帖 10
注册 2004-6-15
状态 离线
『第 10 楼』:  

自己做个专用的字库和写字函数,或者自己设计CHR字体。
偶有一个制作CHR字库的软件,可制中文的CHR字库,不过每个文件最多只能放255个汉字。

2006-11-1 10:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pcwawa
初级用户




积分 118
发帖 10
注册 2004-6-15
状态 离线
『第 11 楼』:  

如果你自己做字库,请先决定做等宽的字体还是做变宽的,实现起来大不相同啊。

2006-11-1 10:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pcwawa
初级用户




积分 118
发帖 10
注册 2004-6-15
状态 离线
『第 12 楼』:  

回复完了才发现是stone,呵呵

2006-11-1 10:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: