我正在尝试使用 Visual Studio 2008 pro 和带有 .NET CF2.0 的 c# 为我的汽车中的 Windows CE 5.0 设备开发智能设备程序。我想使用 AddFontResourceEx 添加字体,但我无法让它工作。这是代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private const uint FR_PRIVATE=0x10;
[DllImport("GDI32.dll",EntryPoint="AddFontResourceEx")]
static extern int AddFontResourceEx(string lpszFilename, uint fl, IntPtr pdv);
private void button1_Click(object sender, EventArgs e)
{
AddFontResourceEx(".\\ELEPHNT.TTF", FR_PRIVATE, IntPtr.Zero);
label1.ForeColor = Color.FromArgb(155, 25, 34);
label1.Font = new Font("ELEPHNT.TTF", 18, FontStyle.Regular);
label1.Text = "Hello world!";
}
}
它构建成功,我可以运行程序,但字体不会改变。我将字体文件添加到程序所在的同一目录中。你能告诉我出了什么问题吗?
编辑:对于那些想知道的人,这里是正确的代码
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private const uint FR_PRIVATE=0x10;
[DllImport("coredll.dll",EntryPoint="AddFontResourceW")]
private static extern int AddFontResourceW(string lpszFilename, uint fl, IntPtr pdv);
private void button1_Click(object sender, EventArgs e)
{
AddFontResourceW("\\<fill in path>\\ELEPHNT.TTF", FR_PRIVATE, IntPtr.Zero);
label1.ForeColor = Color.FromArgb(155, 25, 34);
label1.Font = new Font("Elephant", 18, FontStyle.Regular);
label1.Text = "Hello world!";
}
}
以上代码适用于可以处理 True Type 字体 (.ttf) 的 CE 设备。其他一些 CE 设备(例如我车上的设备)使用光栅(位图)字体(例如 .fnt 类型字体)。在这种情况下,入口点“AddFontResourceW”保持不变,但在其余代码中,您需要省略“W”,因此“AddFontResource”。
不能在 C# 代码中使用 C++ 声明,需要使用 pinvoke 和兼容的数据类型: http://www.pinvoke.net/search.aspx?search=addfontresource&namespace=[全部] 在 Windows CE 中没有相对路径,因此您必须使用字体文件的完整路径,从 .
开始