打印后台处理程序和 Unidrv 打印机驱动程序在 Windows Vista 中得到了增强,以在多语言环境中提供更好的打印机表单支持。 后台处理程序支持窗体显示名称和新的FORM_INFO_2数据结构的多语言用户界面(MUI)字符串,以包含支持 MUI 字符串所需的附加信息。
FORM_INFO_1数据结构定义如下。
typedef struct _FORM_INFO_1 {
DWORD Flags;
LPTSTR pName;
SIZEL Size;
RECTL ImageableArea;
} FORM_INFO_1, *PFORM_INFO_1;
在 FORM_INFO_1 中,pName 成员是唯一的字符串字段,因此你可以使用它创建内部搜索例程用于在内部数据库中查找表单的键名称,以及作为向最终用户显示的显示名称。
以下代码示例中定义的FORM_INFO_2结构添加了其他字段以提供 MUI 支持。
typedef struct _FORM_INFO_2 {
DWORD Flags;
LPTSTR pName;
SIZEL Size;
RECTL ImageableArea;
LPCSTR pKeyword;
DWORD StringType;
LPCTSTR pMuiDll;
DWORD dwResourceId;
LPCTSTR pDisplayName;
LANGID wLangId;
} FORM_INFO_2, *PFORM_INFO_2;
FORM_INFO_2添加 pKeyword 成员以启用添加非重复关键字,这与显示名称不同。
此结构还允许使用 pMuiDll 和 dwResourceId 成员将资源 DLL 和资源 ID 添加到窗体数据库。 当 StringType 成员具有 STRING_MUIDLL 值并且 pMuiDll 和 dwResourceId 成员包含显示名称的资源 DLL 和标识符时,后台处理程序中的 AddForm 函数查找 DLL 中的显示名称并在内部记录。 使用 Level 值为 2 调用 GetForm 或 EnumForms 函数时,FORM_INFO_2 结构中返回的信息将包含 pDisplayName 引用的显示名称以及 wLangID 中的相应语言 ID。
调用 AddForm 时继续使用FORM_INFO_1结构的打印机驱动程序将仅存储表单数据库中该结构中找到的信息。 当通过调用返回FORM_INFO_2结构的 GetForm 或 EnumForms 查询时,在FORM_INFO_1结构中找不到的FORM_INFO_2结构中的成员将 NULL 或 0。
有关添加打印机窗体以及使用FORM_INFO_1和FORM_INFO_2数据结构的详细信息,请参阅 Microsoft Windows SDK 文档。