c# - 无法在 Windows CE 上将字体更改为 "Arial"

标签 c# fonts compact-framework windows-ce

我们使用 Windows CE 6.0 设备并使用 .NET CF v2.0 进行编程。如果我在加电时立即启动应用程序(在 HKLM\init 中使用合适的注册表设置),则以下代码在 Label 控件上有效,但在 ListView 控件上失败:

cntrl.Font = new Font("Arial", cntrl.Font.Size, cntrl.Font.Style);

失败的症状是,即使在调用 ListView 的代码之后,Font.Name 仍然是“Tahoma”。不知道为什么。

现在我编辑注册表以停止应用程序在开机时立即启动。重新启动设备,等待几秒钟,然后手动启动我的应用程序...现在代码适用于所有控件类型!

或者,我添加一个快捷方式到\Windows\Startup (或 HKLM\System\Explorer\Shell Folders\Startup 中指定的 Startup 文件夹)。这会在几秒钟的延迟后自动加载应用程序,这也有效。

在设计时,控件的字体为“Tahoma”,如果用户选择的语言是越南语,则将替换为“Arial”。我附上了应用程序的两张图像来显示问题。

App launched immediately on power up

App launched manually a few seconds after power up

您会注意到,Label 控件不受影响,只有 ListView 控件受影响。我们有一批较旧的 Windows CE 5.0 设备,运行完全相同相同的代码...并且它可以在这些设备上正常工作。这表明 Windows CE 6.0 上存在一些微妙的计时问题。

最后,这仅影响“Arial”和越南语。普通话(使用“Droid Sans Fallback”字体)和泰语(使用“Loma”字体)在所有设备上都能正常工作。

有什么想法吗?我可以做些什么来强制加载字体,或者等待字体加载?

最佳答案

如果应用程序使用 HKLM\Init 启动,您必须确保应用程序使用的所有所需 API 和资源均已准备就绪。有几种方法可以控制:

  • 初始化条目的序号

  • 取决于您的应用的值(value)

  • WaitForAPIReady 函数

例如:

shell32.exe 进程的注册表键为 [HKLM]\Init\"Launch50"="shell32.exe",其依赖项为“Depend50”=hex(3):14,00,1e,00。这意味着当 Launch20 (0x14) 和 Launch30 (0x1e) 后面的进程发出启动信号时,操作系统将启动 shell32.exe。在示例中,Launch20 是 device.exe(驱动程序加载程序),Launch30 是 gwes.exe。这意味着操作系统将确保在这两个进程发出启动信号并加载完成之前不会启动 shell32.exe。

如果您使用 Depend51=0x14,00,0x1e,00 创建条目 Launch51,则在所需进程发出就绪信号之前,Launch51 的进程也不会启动。

此外,如果您使用的是 shell 或 GWES API 函数,则必须确保该函数已准备好可供使用。因此,您需要调用 WaitForAPIReady 来检查这一点,否则您的应用程序可能无法启动或正常运行。额外的字体加载可能取决于 GWES 和 GDI,因此您应该等待 SH_GDI。 GWES 加载已通过 Depend 条目进行检查。

即使您通过 Windows\StartUp 中的 lnk 文件启动进程,您也可能需要使用 WaitForApiReady。在启动过程的早期,某些资源可能仍然不可用。进程越早启动,例如通过 HKLM\init,这种情况就越常见。

关于c# - 无法在 Windows CE 上将字体更改为 "Arial",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33806682/

相关文章:

c++ - Windows Mobile WAP 唤醒

c# - C# 中的不安全代码会导致内存损坏吗?

iphone - iOS 应用程序中的注音符号

java - 如何在 Eclipse 中加载字体而不将其安装在 native 操作系统中?

c# - 连续两次单击同一个按钮时,按钮单击事件不会触发

compact-framework - 紧凑框架中是否有很多好的 list ?

c# - 身份服务器刷新 token 资源所有者密码凭证流

c# - 如何通过编码创建多个端点?

c# - 无法使用 Dapper.NET 将文件流插入 SQL 文件表

javascript - css @font-face 规则不一致