共用方式為


在列印處理器中使用 GDI 函式

Gdi32.dll 會匯出一組使用者模式 GDI 函式,以供處理 NT 型作業系統 EMF 作為輸入格式的列印處理器使用。 下表列出所提供的函式。

函式名稱 描述
GdiDeleteSpoolFileHandle 釋放多任務緩衝處理檔句柄。
GdiEndDocEMF 完成列印作業檔的EMF播放作業。
GdiEndPageEMF 完成實體頁面的EMF播放作業,並從印表機退出頁面。
GdiGetDC 傳回印表機裝置內容的句柄。
GdiGetDevmodeForPage 傳回文件頁面的 DEVMODEW 結構。
GdiGetPageCount 傳回檔頁數。
GdiGetPageHandle 傳回文件頁面的句柄。
GdiGetSpoolFileHandle 傳回多任務緩衝處理檔句柄,做為其他 GDI 函式的輸入。
GdiPlayPageEMF 播放與文件頁面相關聯的 EMF 記錄。
GdiResetDCEMF 重設印表機的裝置內容。
GdiStartDocEMF 執行列印作業檔的初始化作業。
GdiStartPageEMF 執行實體頁面的初始化作業。

EMF 印表處理器的 PrintDocumentOnPrintProcessor 應該呼叫 GdiGetSpoolFileHandle 以取得多任務緩衝處理檔句柄,並 取得 GdiGetDC 以取得印表機的裝置內容句柄。 然後,它可以執行下列步驟:

  • 針對每個列印作業文件,必須先呼叫 GdiStartDocEMF ,才能播放任何 EMF 記錄,而且必須在播放最後一個 EMF 記錄之後呼叫 GdiEndDocEMF

  • 若要列印每個實體頁面,必須先呼叫 GdiStartPageEMF ,才能在頁面上繪製任何文件頁面,而且必須在實體頁面上繪製最後一個檔頁面之後呼叫 GdiEndPageEMF

  • 若要在實體頁面上繪製每個文件頁面,必須呼叫 GdiGetDevmodeForPage ,以判斷在上次繪製檔頁面之後,DEVMODE 結構內容是否已變更。 如果 DEVMODE 已變更,則必須呼叫 GdiEndPageEMFGdiStartPageEMF) 來啟動新的實體頁面 (,而且必須呼叫 GdiResetDCEMF 來更新印表機的裝置內容。 系統會先呼叫 GdiGetPageHandle 以取得文件頁句柄,然後呼叫 GdiPlayPageEMF 來繪製頁面,以在實體頁面上繪製文件頁面。

完全繪製作業之後,列印處理器必須呼叫 GdiDeleteSpoolFileHandle

如果列印處理器需要總頁數,才能開始列印頁面 (例如列印頁面,) 它可以呼叫 GdiGetPageCount,但此函式不會在多任務緩衝處理結束時傳回,因此會停用在多任務緩衝處理時列印的能力。

如果列印處理器使用這些 GDI 函式,其 EnumPrintProcessorDatatypes 函式必須傳回 “NT EMF” 做為支持的數據類型,其代表泛型 Windows 2000 和更新版本的 EMF 格式。 列印處理器不得修改 EMF 記錄。