在列印處理器中使用 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 已變更,則必須呼叫 GdiEndPageEMF 和 GdiStartPageEMF) 來啟動新的實體頁面 (,而且必須呼叫 GdiResetDCEMF 來更新印表機的裝置內容。 系統會先呼叫 GdiGetPageHandle 以取得文件頁句柄,然後呼叫 GdiPlayPageEMF 來繪製頁面,以在實體頁面上繪製文件頁面。
完全繪製作業之後,列印處理器必須呼叫 GdiDeleteSpoolFileHandle。
如果列印處理器需要總頁數,才能開始列印頁面 (例如列印頁面,) 它可以呼叫 GdiGetPageCount,但此函式不會在多任務緩衝處理結束時傳回,因此會停用在多任務緩衝處理時列印的能力。
如果列印處理器使用這些 GDI 函式,其 EnumPrintProcessorDatatypes 函式必須傳回 “NT EMF” 做為支持的數據類型,其代表泛型 Windows 2000 和更新版本的 EMF 格式。 列印處理器不得修改 EMF 記錄。