将表单添加到表单数据库

重要

建议使用 Microsoft 的 IPP 收件箱类驱动程序以及打印支持应用 (PSA) ,自定义 Windows 10 和 11 中的打印体验,以便进行打印机设备开发。

有关详细信息,请参阅 打印支持应用设计指南

如果打印机支持其他表单,可以通过在打印机驱动程序的 GPD 文件中描述它们,将它们添加到 Unidrv 打印机驱动程序。 如果将资源 ID 与 *rcNameId 字段和资源 DLL 用于窗体显示名称字符串,则驱动程序将自动使用 Windows Vista Unidrv 打印机驱动程序提供的新本地化增强功能。 Unidrv 打印机驱动程序插件也受益于后台处理程序的这些自动更改,不需要任何其他修改。 有关这些增强功能的详细信息,请参阅 对 Windows Vista 中的打印机窗体的更改

如果不对 GPD 文件中的可本地化字符串使用资源 DLL,则应删除可本地化字符串,将其存储在资源 DLL 中,并将字符串替换为 GPD 文件中的相应资源 ID。

下面的代码示例是 GPD 文件中的一个摘录,该文件使用资源 ID 作为显示名称。

*Feature: PaperSize
{
    *Option: Option2
    {
 *rcNameID: 259
        (form definition)
    }
    (other form definitions).
}

在 Windows Vista 提供的 Unidrv 打印机驱动程序中, FORM_INFO_2 结构由从 GPD 文件读取的数据填充,如下表所示。 如果打印机的 GPD 文件已包含填充此结构所需的信息,则无需更改任何内容即可使用 Windows Vista Unidrv 打印机驱动程序提供的新功能。

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字段 使用的 GPD 值 字段说明
Flags FORM_PRINTER

此值由 Unidrv 打印机驱动程序分配,因为它正在添加窗体。 GPD 文件中的值不用于此字段。
结构的属性。
pName 从资源 DLL 或 GPD 文件中的 *rcName 字段获取的窗体的本地化名称。 指向以 null 结尾的字符串的指针,该字符串指定窗体的名称。 此字符串用于标识表单数据库中的窗体,并且必须是唯一的。
大小 从 GPD 文件中的 “PageDimensions” 选项读取的信息的大小。 形状的宽度和高度(以千分之几毫米为单位)。
ImageableArea 从 GPD 文件中的 *PrintableArea 选项读取的大小信息。 打印机可以打印的页面区域的宽度和高度(以千分之几毫米为单位)。
pKeyword GPD 文件中 *Option 条目的值。 指向窗体中不可本地化的字符串标识符的指针。 传递到 AddForm 或 SetForm 时,此指针为调用方提供了一种在所有区域设置中标识表单的方法。
StringType STRING_MUIDLL

如果 GPD 使用 *rcNameId 选项,并且表单名称可从资源 DLL 获取,则会分配STRING_MUIDLL值。 如果在 GPD 文件中改用 *rcName 选项,则此字段的值STRING_NONE。 GPD 文件中的值不用于此字段。
指定如何在运行时获取窗体的本地化显示名称。
pMuiDll 如果使用 *rcNameId 选项,则为 GPD 文件中的 *ResourceDLL 条目的值。 如果 GPD 文件中改用 *rcName 选项,则此字段的值为 NULL 当 StringType 包含STRING_MUIDLL时,包含本地化显示名称的 MUI 本地化资源 DLL。
dwResourceId GPD 文件中 *rcNameID 条目的值。 如果在 GPD 文件中改用 *rcName 选项,则此字段的值为 0。 StringType 包含STRING_MUIDLL时窗体显示名称的资源 ID(以 pMuiDll 为单位)。
pDisplayName NULL

不使用此字段。
StringType 包含STRING_LANGPAIR时,表单的显示名称采用 wLangId 指定的语言。
wLangId 0

不使用此字段。
StringType 包含STRING_LANGPAIR时 pDisplayName 的语言。