Board logo

标题: dos字体问题 [打印本页]

作者: stone830209     时间: 2006-9-20 05:13    标题: dos字体问题

我在做程序的图形界面的时候,要用到许多不同的字体,这些字体windows都有,比如仿宋,新魏,等等,我想问问大家dos下运行的程序(16位,32位的都行),有没有方便些的字体解决方案,实现windows字体的显示。谢谢
作者: stone830209     时间: 2006-9-20 07:37
希望看到本贴的朋友能帮顶一下,如果觉得这个问题很幼稚,那也请您在百忙之中,点拨一二,也许您的几句话就帮了我很大的忙。谢谢了
作者: 本是     时间: 2006-9-20 12:09
请到汉化版找“本是”在VGA文本汉字显示的贴子里提供过!
作者: JonePeng     时间: 2006-9-22 11:06
DOS下的16*16点阵中文字只有默认的宋体字最好看
作者: stone830209     时间: 2006-9-22 20:56
首先非常感谢两位高手的回答,不过我想知道的是一些原理性的东西,或者一个具体的方案,比如我现在正着手的一个方案是,像vb的picturebox控件中用我想要的windows字体写入所有ascII码字符,然后逐个扫描,生成该字体的所有ascII字模。其实总结一下,我的问题就是,希望大家给提供一些,生成字模的方案,或者你曾经实现的思路。谢谢
作者: stone830209     时间: 2006-9-22 21:15
对了顺便说一下,我用picturebox控件生成字模的时候,有个地方感觉很别扭,就是字体大小的问题,由于要逐个扫描picturebox中的字符,所以关键的一点是要知道该种字体字符占多少像素,比如16*16或32*32,但是windows字体大小的单位都是磅,所以我的办法是,扫描一个字符,然后测出它的长宽边界,用这个边界做为以后显示和扫描的字体长宽像素值,我总感觉这种办法挺别扭的,希望大家也给指点一下。
作者: zyl910     时间: 2006-9-22 21:52
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
作者: zyl910     时间: 2006-9-22 22:05
文本排版是很复杂的

用GetTextMetrics可以取得当前字体的排版信息,GetOutlineTextMetrics可以进一步得到TTF字体的排版信息
GetCharABCWidths、GetCharABCWidthsFloat可以的到字体的左右悬挂属性,用于非等宽字体或斜体状态,可以使一个一个字符的某一部分位于另一个字符的单元格内,如: fffffff
用GetTextExtentPoint32计算一字符串在该DC绘制后所占的尺寸
作者: stone830209     时间: 2006-9-25 07:12
非常感谢,恕我愚钝,没看太懂,我再研究研究你的帖啊 ,谢谢啊
作者: pcwawa     时间: 2006-11-1 10:32
自己做个专用的字库和写字函数,或者自己设计CHR字体。
偶有一个制作CHR字库的软件,可制中文的CHR字库,不过每个文件最多只能放255个汉字。
作者: pcwawa     时间: 2006-11-1 10:34
如果你自己做字库,请先决定做等宽的字体还是做变宽的,实现起来大不相同啊。
作者: pcwawa     时间: 2006-11-1 10:34
回复完了才发现是stone,呵呵