Caching (国际化)

Uniscribe 保存 Unicode 到字形 (cmap) 映射、字形宽度和 OpenType 脚本整形表。 特定大小的表的句柄称为“脚本缓存”。 许多 Uniscribe 函数同时调用设备上下文句柄参数和指向 SCRIPT_CACHE 结构的指针。 这些函数首先通过脚本缓存查找信息,仅当尚未缓存所需的表时,才使用设备上下文。 调用 ScriptShapeScriptPlaceScriptTextOut 函数时,应用程序必须向 SCRIPT_CACHE 结构传递指针。 在应用程序首次将句柄传递给 Uniscribe 函数之前,应将其初始化为 NULL 。 应用程序不应为不同的字体或不同大小传递相同的句柄。

应用程序可以随时释放脚本缓存。 Uniscribe 在其字体和形状器缓存中维护引用计数,仅在释放字体的所有大小时释放字体数据,并且仅在形状器支持的所有字体被释放时释放整形器数据。 当应用程序使用样式完成时,它应调用 ScriptFreeCache 函数来释放样式的脚本缓存。

对于 ScriptShapeScriptPlace,应用程序传递 null 设备上下文是有效的。 大多数情况下,调用会成功,因为已缓存所需的表。 如果整形或放置需要访问设备上下文, 则 ScriptShapeScriptPlace 会立即返回E_PENDING错误代码。 然后,应用程序必须在设备上下文中选择字体。 对于大多数应用程序,这可以通过避免使用 对 SelectObject 的调用重复准备设备上下文句柄来帮助性能。

使用 Uniscribe