Share via


DEVMODEW 結構

DEVMODEW 結構是 DEVMODE結構的 Unicode 版本,如Microsoft Windows SDK檔中所述。 (DEVMODEW 上的 'W' 尾碼代表「寬」或 Unicode 字元。) 雖然應用程式可以使用任一結構,但驅動程式必須使用 DEVMODEW 結構,而不是 DEVMODE 結構。

公用和私人成員

緊接在 DEVMODEW 結構的已定義成員之後, (通常稱為其公用 DEVMODEW 成員) , (其私人 DEVMODEW 成員) 一組驅動程式定義成員。 下圖顯示公用區段 (實際的 DEVMODEW 結構本身) 和私用區段。

說明 DEVMODEW 結構的公用和私用區段的圖表。

一般而言,私人成員只能由印表機驅動程式使用。 驅動程式會提供 dmDriverExtra 成員中這個私人區域的大小,以位元組為單位。 驅動程式定義的私用成員供驅動程式獨佔使用。

對於印表機驅動程式,DEVMODEW 結構是用來指定列印檔案的使用者選擇。 它也可用來為印表機指定這些選項的預設值,例如列印的複本數目、紙張大小和其他屬性。 針對顯示裝置,DEVMODEW 結構會指定顯示內容,例如每個圖元的位數、圖元尺寸和顯示頻率。

初始化 DEVMODEW 結構

根據顯示器驅動程式或印表機驅動程式所使用的 DEVMODEW 結構,會以兩種不同的方式初始化 DEVMODEW 結構。

  • 顯示驅動程式 DEVMODEW 初始化

    顯示驅動程式的 DrvGetModes 進入點會將 DEVMODEW 結構的所有成員初始化為零。 DrvGetModes 接著會將顯示驅動程式 DLL 的名稱複製到 dmDeviceName 成員、使用 DEVMODEW 結構的版本填入 dmSpecVersiondmDriverVersion 成員,並將顯示內容資訊複製到適當的成員。

  • 印表機驅動程式 DEVMODEW 初始化

    當應用程式呼叫DocumentProperties (Microsoft Windows SDK檔) 或DrvDocumentPropertySheets (NT 型作業系統圖形 DDI) 中所述的印表機介面 DLL 函式時,會使用預設值來建立 DEVMODEW 結構。 然後,應用程式即可自由修改任何公用 DEVMODEW 成員。 進行任何變更之後,應用程式應該接著對之前呼叫的相同函式進行第二次呼叫,以便將變更的成員與驅動程式內部 DEVMODEW 結構的成員合併。 第二個呼叫是必要的,因為某些變更可能無法正常運作;必須呼叫印表機驅動程式,才能更正 DEVMODEW 結構。 當檔即將列印時,應用程式會將合併的 DEVMODEW 結構傳遞給CreateDC (,如Microsoft Windows SDK檔) 所述,它會將其傳遞至DrvEnablePDEV DDI。 此時,驅動程式的轉譯 DLL 會先驗證 DEVMODEW 結構,並在必要時進行修復,再執行列印工作。

使用 DEVMODEW 結構

數個 API 和圖形 DIS 會針對列印、查詢裝置功能、顯示使用者介面等用途,使用 DEVMODEW 結構中的資訊。 例如, DrvConvertDevMode 是列印多工緩衝處理器圖形 DDI,可將 DEVMODEW 結構從一個作業系統版本轉譯到另一個作業系統版本。 如果印表機驅動程式從另一部在不同作業系統版本上執行的電腦取得 DEVMODEW 結構,則可能是必要的。

修改 DEVMODEW 結構

應用程式和驅動程式可以免費要求 DEVMODEW 結構,並直接修改其公用元件。 不過,只允許驅動程式修改私人 DEVMODEW 結構成員。

若要修改私人 DEVMODEW 結構成員,驅動程式必須先判斷私人資料開頭的位移。 假設有這個 結構的開頭的指標,以及保留結構公用部分大小的 dmSize 成員,就可以找到私用部分的開頭。 下列範例示範如何初始化私用區段開頭的指標。 在此範例中, pdm 指向 DEVMODEW 結構的開頭。

PVOID pvDriverData = (PVOID)  (((BYTE *) pdm) + (pdm -> dmSize));

印表機驅動程式/顯示驅動程式 DEVMODEW 差異

DEVMODEW 結構成員分為三種類別:

  • 只有印表機驅動程式使用的成員

  • 僅顯示驅動程式使用的成員

  • 印表機和顯示器驅動程式所使用的成員

下表列出數個 僅供 印表機驅動程式使用的公用 DEVMODEW 成員:

僅供印表機驅動程式使用 用途
dmScale 指定要縮放影像以進行列印的百分比。
dmCopies 指定列印張數。
dmColor 指定色彩印表機是否應該列印色彩或單色。
dmOrientation 指定直向或橫向紙張的方向。

下表列出數個 僅供 顯示驅動程式使用的公用 DEVMODEW 成員:

僅限顯示驅動程式使用 用途
dmBitsPerPel 指定顯示裝置的每一像素位元數的色彩解析度。
dmPelsWidth 指定可見裝置表面的寬度,以圖元為單位。
dmPelsHeight 指定可見裝置表面的高度,以圖元為單位。
dmDisplayFlags 指定顯示模式 - 色彩與單色、交錯與非交錯。
dmDisplayFrequency 指定顯示器的重新整理速率,以 hertz 為單位。

第三個表格列出印表機和顯示驅動程式所使用的數個公用 DEVMODEW 成員:

印表機和顯示驅動程式使用 用途
dmDeviceName 針對 display,指定顯示驅動程式的 DLL。 針對印表機,指定印表機的「易記名稱」。
dmFields 指定位旗標,識別其後面的 DEVMODEW 成員正在使用中。 例如,當 dmBitsPerPel 成員包含有效資料時,就會設定DM_BITSPERPEL旗標。
dmSize 指定 DEVMODEW 結構之公用部分的大小,以位元組為單位。
dmDriverExtra 指定遵循公用結構成員的私人驅動程式資料位元組數目。 對於顯示驅動程式,這通常是零。