当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 在.Net Micro Framework中显示汉字

ASP.NET
AspNetPager与Socut.Data使用方法
asp.net UpdaeProgress的简单用法
asp.net ajaxControlToolkit ValidatorCalloutExtender的简单用法
asp.net 简易生成注册码(数字+大小写字母)
asp.net中利用ashx实现图片防盗链代码
ASP.NET程序中常用代码汇总
ASP.NET 2.0/3.5中直接操作Gridview控件插入新记录
ASP.NET Ajax级联DropDownList实现代码
ASP.NET 2.0写无限级下拉菜单
asp.net Web Services上传和下载文件(完整代码)
asp.net DataGrid控件中弹出详细信息窗口
Asp.NET 多层登陆实现代码
利用Asp.Net回调机制实现进度条
ASP.NET Ref和Out关键字区别分析
Javascript调用Webservice的多种方法
.Net下的签名与混淆图文分析
.Net Compact Framework开发小技巧 推荐
.Net连接Oracle数据库的实现代码
js获取.aspx页面里面的服务器控件和.ascx中的服务器控件值
asp.net下 jquery jason 高效传输数据

ASP.NET 中的 在.Net Micro Framework中显示汉字


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-23   浏览: 89 ::
收藏到网摘: n/a

摘要:MF平台支持的字体是专有格式,扩展名为tinyfnt,需要用专门的转化工具才能把windows平台上的字体转换为tinyfnt字体。在.Net Micro Framework SDK中提供了一个叫做TFConvert.exe的工具,我们可以用它在命令行下将PC机上的TrueType或者OpenType字体文件生成tinyfnt字体,供.Net Micro Framework的应用程序使用。使用TFconvert 工具进行字体转化,首先需要创建一个.fntdef 的文件其是字体的定义文件,其实它就是一个是TEXT文本文件,但是以.fntdef结尾的。本文阐述了在.Net Micro Framework 中以PC机上的字体显示汉字的步骤。

1.编辑.fntdef文件

先创建一个文本文档(.txt),这里我们以华文行楷字体为例,故取名为hwxk.txt。这个文件就是我们用来配置导出字体的文件,我们在其中添加以下内容:

AddFontToProcess C:"WINDOWS"Fonts"STXINGKA.TTF

SelectFont "WE:400,HE:20,FN:宋体"

ImportRange 32 126

ImportRange 19968 40869

配置文件中常用的命令如下:

1)、AddFontToProcess

格式:AddFontToProcess path

说明:填写中文字库的路径信息(字库源的路径,需要输入绝对路径),如果路径里有空格,一定用引号括起来,如示例所示:

AddFontToProcess C:"Windows"Fonts"Miramo.ttf

AddFontToProcess "C:""Program Files""Microsoft .NET Micro Framework""v2.0.3036""Tools""Fonts""TrueType""Miramo.ttf"

2)、SelectFont

格式:SelectFont "selectionstring"

说明:参数比较多,常用的就下面几个,余下的请看msdn的相关文章。

WE(Weight)字体的厚重度,0~1000,标准的是400,粗体为700

FN(Face Name) 字体名称,如果包含空格,要用引号括起来

HE(Height)字体大小(实际测试范围1~36)

WI(Width)字体宽度(实际测试范围1~12)

IT(Italic)设置字体的倾斜角度

UN(Underline)设置字体下面的下划线

注意 这个命令是Select Font,也就是说,从字库源中选择出指定参数的字体,.Net Mirco Framework与.Net精简框架集和.Net框架集不同,它的字体的大小、加粗、斜体等等参数不能在程序中任意改变,你导出的是什么样的字体,那就是什么字体,不能改变,一出生就决定命运。例如你对同一个字符串显示不同的大小,那么对应每一个大小,都需要你导出一个字体库。

3)、ImportRange

格式:ImportRange start end

说明:这个比较重要,是指从字库中导出字体的起始和结束位置,可以多个命令连用。

详细的介绍在msdn上有相关说明:ms-help://MS.VSCC.v80/MS.VSIPCC.v80/MSVS.PSDK/PSDK/PSDK_TF_Fntdef.htm

2. 打开命令行工具

在桌面上点击“开始”à“运行”à键入CMD,用cd指令导航到SDK的Tools文件夹下,利用dir命令,我们可以看到该目录的内容如图:

 

3.使用TFConvert工具

我们假设在c盘下已经创建了samplefonts的目录,把TFconvert.exe hwxk.ttf (以华文行楷作为例子)复制到该目录下,同时把刚才创建的.fntdef hwxk.fntdef 也复制到该目录下。建议大家在windows xp下进行这个工具的使用。

TFconvert 使用方法: TFconvert <input file> <output file>

Input file= 字体定义文件.fntdef,

output file =字体输出文件 .tinyfnt

dos 命令行下 切换到samplesfont 目录下,输入:

TFconvert c:"samplefonts"hwxk.fntdef c:"samplefonts"hwxk.tinyfnt

回车即可,这样在该目录下就有hwxk.tinyfnt 文件生成。当然,这里的目录也可以是你自定义的。

4.测试

在Visual Studio中新建一个Windows Application。首先双击Resources.resx,在出现的Tab页中,我们将String1的内容由“Hello World”改为你要显示的汉语,然后点击左上角的String旁边的小箭头,选择Files:

然后点击旁边的“Add Resouces”右边的小箭头,选择“Add Existing File”,然后浏览到我们之前生成的tinyfnt所在文件目录下。选择hwxk.tinyfnt,将它添加到资源文件中。

然后我们打开Program.cs,默认生成的代码中将:

text.Font = Resources.GetFont(Resources.FontResources.small);

改为:

text.Font = Resources.GetFont(Resources.FontResources.hwxk);

重新编译后,在模拟器中就能看到中文字体了,如下图:

5.扩展汉字文件

在前面的实验中,虽然正确的显示出了汉字,但是也许有人会问,为什么fntdef文件中FN会是“宋体”呢,不是华文行楷么?事实上,当你尝试把FN从宋体改为其他名称是,目前版本的TFConvert会在命令行中打印出一条错误信息:“Font cannot be found matching Selectfont descriptor Facename .Expected ‘??’,found ‘??’”。下面我们就来看看,如何解决这个问题,而达到正常显示所有中文字体的目的。

首先,我们需要使用fontcreator工具来修改中文字体的“font name” 该工具大家可以在网上下载,这里简单介绍下如何使用该工具来修改

A、 使用fontcreator 工具打开选定的中文字体,如“微软雅黑”

B、 选择菜单中“Format”,选择“Naming”出现如下图:

在“Platform”中选择“Microsoft unicode BMP only”,在“Language”中选择“Chinese-PRC”

注意其中的“Include font family name”、“Include unique font identifier” 和“Include full font name”选项,由于该fontcreator工具没有汉化,所有这些选项显示都是字符而不是具体的中文字体的名称

C、 在上面的界面中在“Language”选择“English-united states”出现如下图:

同时注意其中的“Include font family name”、“Include unique font identifier” 和“Include full font name”选项,这些选项都包含了“Microsoft YaHei”的字样

D、 开始修改:把C步骤中的“Microsoft YaHei”字样内容复制到B步骤中的相应选项中,如下图:

修改后按“ok”,并保存该字体。

E、 同时修改.fntdef 中的内容:

AddFontToProcess C:"SampleFonts"MSYH.ttf

SelectFont "WE:400,FN:Microsoft YaHei"

#import upper case letters

ImportRange 32 126

ImportRange 19968 40869

这样你重新运行Tfconvert工具进行转换的时候就不会出现如下的错误提示:

说明:上面所修改的选项中的内容可以替换为MsYaHei ,或其他可以代表微软雅黑字体的英文名称都可以,同时你可以试着把这些选项的内容替换为“宋体”,这样你用Tfconvert进行转换的时候也不会出现错误提示。个人认为在.Net Micro Framework 的中文字体转换中目前只支持以中文“宋体”为face name(FN)的转换,其他像微软雅黑、华文细黑、幼圆为显示名称的中文字体,都要把名称修改为英文名称才能正常转换。

下图显示的是经过上述处理后的华文行楷字体:

参考资料:

http://blog.csdn.net/yefanqiu/archive/2007/11/01/1862300.aspx