缓存 (国际化)
Uniscribe 保存 Unicode 到字形 (cmap) 映射、字形宽度和 OpenType 脚本整形表。 特定大小特定字体的表的句柄称为“脚本缓存”。 许多 Uniscribe 函数同时调用设备上下文句柄参数和指向 SCRIPT_CACHE 结构的指针。 这些函数首先通过脚本缓存查找信息,仅在尚未缓存所需表时使用设备上下文。 调用 ScriptShape、 ScriptPlace 或 ScriptTextOut 函数时,应用程序必须将指针传递到 SCRIPT_CACHE 结构。 在应用程序第一次将句柄传递到 Uniscribe 函数之前,应将其初始化为 NULL 。 应用程序绝不应为不同的字体或不同大小传递相同的句柄。
应用程序可以随时释放脚本缓存。 Uniscribe 在其字体和整形器缓存中维护引用计数,仅在释放所有大小的字体时释放字体数据,仅在释放整形器支持的所有字体时释放整形器数据。 当应用程序使用样式完成时,它应调用 ScriptFreeCache 函数,以释放样式的脚本缓存。
对于 ScriptShape 和 ScriptPlace,应用程序传递空设备上下文是有效的。 大多数情况下,调用会成功,因为所需的表已缓存。 如果整形或放置需要访问设备上下文, 则 ScriptShape 或 ScriptPlace 会立即返回并返回E_PENDING错误代码。 然后,应用程序必须在设备上下文中选择字体。 对于大多数应用程序,这可以通过调用 SelectObject 来避免重复准备设备上下文句柄,从而帮助提高性能。