.Net Micro Framework研究—中文显示
2008-03-11 14:51
423 查看
试验平台:.Net Micro Framework 模拟器 微软示例程序中,仅支持两种字体(small.tinyfnt和NinaB.tinyfnt),并不支持中文。翁祖泉老师在《如何在Microsoft .NET Micro Framework 的应用程序中添加中文字体?》的文章中,写了如何添加字体的方法,正如他文章所写,这是一篇介绍在.NET Micro Framework 应用程序中使用中文字体的初级入门文章。所以我觉得有必要再深入研究一下。上篇文章的链接:http://www.winbile.net/Detail.aspx?D=260,1118125,855,127 在看我的文章之前,一定先看看这篇文章,我写的内容只是这篇文章的一个补充。MF平台支持的字体是专有格式,扩展名为tinyfnt,需要用专门的转化工具才能把windows平台上的字体转换为tinyfnt字体。转换工具在MF SDK开发包中就有,安装后的位置为:C:/Program Files/Microsoft .NET Micro Framework/v2.0.3036/Tools/TFConvert.exe要转换字体,需要三个条件:第一,转换工具,这个我们已经有了;第二,中文字库,直接在C:/WINDOWS/Fonts目录中选一个你需要转换的字体即可;第三,转换用的配置文件(扩展名为fntdef的文件),这个比较麻烦,我着重说一下。配置文件中常用的命令如下:1、AddFontToProcess 格式:AddFontToProcess path说明:填写中文字库的路径信息(字库源的路径,需要输入绝对路径),如果路径里有空格,一定用引号括起来,如示例所示:
SelectFont "WE:400,FN:宋体"
ImportRange 19968 40869 注意上面的示例文件仅导出了常用的汉字,如果你用该字体显示中英文混合的字符串,你会发现其它字体全部是空格,这显然不是我们想要的结果,所以我们导出的字体不仅有中文、英文字符,还要有必要的标点符号,所以我们要用多个ImportRange 命令。 这是我写的配置文件,我导出字体为华文细黑字体。AddFontToProcess D:/SELF/MF/china/STXIHEI.TTFSelectFont "WE:400,FN:宋体"#英文字母和常用符号ImportRange 32 126#罗马数字ImportRange 8544 8569#各个方向的箭头ImportRange 8592 8601#1~10 圆圈内嵌数字ImportRange 9312 9321#有用的符号ImportRange 9600 9835#汉字ImportRange 19968 40869 导出的大小为:695K,原字体大小9540K,不过与英文字库相比还是大的多。如果在MF上的应用汉字很少,可以仅导出使用的字符。从这点出发,似乎根据使用的字符串,自动导出生成相应的字体库的程序又有了用武之地(以前我们在西文DOS下,显示中文字体就这么做过)。说做就做,下面就是我完成的程序(原理很简单,根据区位码导出字符)。
![](http://p.blog.csdn.net/images/p_blog_csdn_net/yefanqiu/MF071101001.JPG)
(图MF071101001.jpg)我们只转换“[叶帆工作室]欢迎您”这几个字,最后我们转换的字库仅456个字节,与695K相比那差好多数量级,是不是很棒?!如果我们把上面的程序改进一下,也许可以自动根据代码创建相应的字库文件了,那就更棒了。下面就把我们的字库加入到程序,用模拟器试一下,看看是否能正确显示汉字。
![](http://p.blog.csdn.net/images/p_blog_csdn_net/yefanqiu/MF071101002.JPG)
(图MF071101002.jpg)是不是很棒J相关代码如下(记得先在资源中添加我们转换后的字库文件):using System;using Microsoft.SPOT;using Microsoft.SPOT.Input;using Microsoft.SPOT.Presentation;using Microsoft.SPOT.Presentation.Controls;namespace HZTest{ public class Program : Microsoft.SPOT.Application { public static void Main() { Program myApplication = new Program(); Window mainWindow = myApplication.CreateWindow(); // Create the object that configures the GPIO pins to buttons. GPIOButtonInputProvider inputProvider = new GPIOButtonInputProvider(null); // Start the application myApplication.Run(mainWindow); } private Window mainWindow; public Window CreateWindow() { // Create a window object and set its size to the // size of the display. mainWindow = new Window(); mainWindow.Height = SystemMetrics.ScreenHeight; mainWindow.Width = SystemMetrics.ScreenWidth; // Create a single text control. Text text = new Text(); //设置字体 yf.tinyfnt text.Font = Resources.GetFont(Resources.FontResources.yf ); text.TextContent = "[叶帆工作室]欢迎您"; text.HorizontalAlignment = Microsoft.SPOT.Presentation.HorizontalAlignment.Center; text.VerticalAlignment = Microsoft.SPOT.Presentation.VerticalAlignment.Center; // Add the text control to the window. mainWindow.Child = text; // Connect the button handler to all of the buttons. mainWindow.AddHandler(Buttons.ButtonUpEvent, new ButtonEventHandler(OnButtonUp), false); // Set the window visibility to visible. mainWindow.Visibility = Visibility.Visible; // Attach the button focus to the window. Buttons.Focus(mainWindow); return mainWindow; } private void OnButtonUp(object sender, ButtonEventArgs e) { // Print the button code to the Visual Studio output window. Debug.Print(e.Button.ToString()); } }} 文字部分就先介绍到这里,下面的几篇文章就该介绍一下图形方面的内容了,等图形掌握了,相信最后我们一定能在MF平台上实现一个很棒的应用。
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,粗体为700FN(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 配置文件内容示例:AddFontToProcess C:/SampleFonts/MSYH.ttf
SelectFont "WE:400,FN:宋体"
ImportRange 19968 40869 注意上面的示例文件仅导出了常用的汉字,如果你用该字体显示中英文混合的字符串,你会发现其它字体全部是空格,这显然不是我们想要的结果,所以我们导出的字体不仅有中文、英文字符,还要有必要的标点符号,所以我们要用多个ImportRange 命令。 这是我写的配置文件,我导出字体为华文细黑字体。AddFontToProcess D:/SELF/MF/china/STXIHEI.TTFSelectFont "WE:400,FN:宋体"#英文字母和常用符号ImportRange 32 126#罗马数字ImportRange 8544 8569#各个方向的箭头ImportRange 8592 8601#1~10 圆圈内嵌数字ImportRange 9312 9321#有用的符号ImportRange 9600 9835#汉字ImportRange 19968 40869 导出的大小为:695K,原字体大小9540K,不过与英文字库相比还是大的多。如果在MF上的应用汉字很少,可以仅导出使用的字符。从这点出发,似乎根据使用的字符串,自动导出生成相应的字体库的程序又有了用武之地(以前我们在西文DOS下,显示中文字体就这么做过)。说做就做,下面就是我完成的程序(原理很简单,根据区位码导出字符)。
(图MF071101001.jpg)我们只转换“[叶帆工作室]欢迎您”这几个字,最后我们转换的字库仅456个字节,与695K相比那差好多数量级,是不是很棒?!如果我们把上面的程序改进一下,也许可以自动根据代码创建相应的字库文件了,那就更棒了。下面就把我们的字库加入到程序,用模拟器试一下,看看是否能正确显示汉字。
(图MF071101002.jpg)是不是很棒J相关代码如下(记得先在资源中添加我们转换后的字库文件):using System;using Microsoft.SPOT;using Microsoft.SPOT.Input;using Microsoft.SPOT.Presentation;using Microsoft.SPOT.Presentation.Controls;namespace HZTest{ public class Program : Microsoft.SPOT.Application { public static void Main() { Program myApplication = new Program(); Window mainWindow = myApplication.CreateWindow(); // Create the object that configures the GPIO pins to buttons. GPIOButtonInputProvider inputProvider = new GPIOButtonInputProvider(null); // Start the application myApplication.Run(mainWindow); } private Window mainWindow; public Window CreateWindow() { // Create a window object and set its size to the // size of the display. mainWindow = new Window(); mainWindow.Height = SystemMetrics.ScreenHeight; mainWindow.Width = SystemMetrics.ScreenWidth; // Create a single text control. Text text = new Text(); //设置字体 yf.tinyfnt text.Font = Resources.GetFont(Resources.FontResources.yf ); text.TextContent = "[叶帆工作室]欢迎您"; text.HorizontalAlignment = Microsoft.SPOT.Presentation.HorizontalAlignment.Center; text.VerticalAlignment = Microsoft.SPOT.Presentation.VerticalAlignment.Center; // Add the text control to the window. mainWindow.Child = text; // Connect the button handler to all of the buttons. mainWindow.AddHandler(Buttons.ButtonUpEvent, new ButtonEventHandler(OnButtonUp), false); // Set the window visibility to visible. mainWindow.Visibility = Visibility.Visible; // Attach the button focus to the window. Buttons.Focus(mainWindow); return mainWindow; } private void OnButtonUp(object sender, ButtonEventArgs e) { // Print the button code to the Visual Studio output window. Debug.Print(e.Button.ToString()); } }} 文字部分就先介绍到这里,下面的几篇文章就该介绍一下图形方面的内容了,等图形掌握了,相信最后我们一定能在MF平台上实现一个很棒的应用。
相关文章推荐
- .Net Micro Framework研究—中文显示
- .Net Micro Framework研究—用MF控制机器人
- .Net Micro Framework研究—实现SideShow窗体界面
- .Net Micro Framework研究—FAT文件系统实现探索
- .Net Micro Framework研究—带I2C总线的模拟器
- .Net Micro Framework研究—串口部署的困惑
- .Net Micro Framework研究—串口部署释疑
- .Net Micro Framework研究—TCP/IP通信
- .Net Micro Framework中文讨论组
- .Net Micro Framework研究—让MF支持英文输入法
- .Net Micro Framework研究—让MF支持英文输入法
- .Net Micro Framework研究—串口部署的困惑
- .Net Micro Framework研究—IO读写
- .Net Micro Framework研究—Tinyfnt字体研究
- .Net Micro Framework研究—带AD的模拟器
- .Net Micro Framework研究—FAT文件系统实现探索
- .Net Micro Framework研究—串口操作
- .Net Micro Framework研究—IO读写
- .Net Micro Framework研究—串口操作
- .Net Micro Framework研究—MF驱动继电器