將表單新增至表單資料庫
重要
新式列印平臺是 Windows 與印表機通訊的慣用方法。 我們建議您使用Microsoft的 IPP 收件匣類別驅動程式,以及列印支援應用程式 (PSA),自定義 Windows 10 和 11 中的列印體驗,以進行印表機裝置開發。
如需詳細資訊,請參閱 新式列印平臺 和 列印支援應用程式設計指南。
如果您的印表機支援其他表單,您可以在印表機驅動程式的 GPD 檔案中描述它們,將它們新增至 Unidrv 印表機驅動程式。 如果您使用資源識別碼搭配 *rcNameId 欄位和表單顯示名稱字串的資源 DLL,驅動程式會自動使用 Windows Vista Unidrv 印表機驅動程式所提供的新當地語系化增強功能。 Unidrv 印表機驅動程式外掛程式也受益於自動對多任務緩衝處理器的這些變更,而且不需要進行任何額外的修改。 如需這些增強功能的詳細資訊,請參閱 Windows Vista 中的印表機表單變更。
如果您未針對 GPD 檔案中的可當地語系化字串使用資源 DLL,您應該移除可本地化的字串、將它們儲存在資源 DLL 中,並以 GPD 檔案中的對應資源識別元取代字串。
下列程式代碼範例是 GPD 檔案的摘錄,該檔案會使用資源識別碼作為顯示名稱。
*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 值 | 欄位描述 |
---|---|---|
旗標 | 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時,表單顯示名稱的 pMuiDll 資源識別碼。 |
pDisplayName | NULL 未使用此欄位。 |
wLangId 指定 StringType 何時包含STRING_LANGPAIR語言的表單顯示名稱。 |
wLangId | 0 未使用此欄位。 |
當 StringType 包含 STRING_LANGPAIR 時,pDisplayName 的語言。 |