devMODEW 結構 (wingdi.h)

DEVMODEW 結構用於指定 Unicode (寬) 字元集中顯示和列印裝置的特性。

語法

typedef struct _devicemodeW {
  WCHAR dmDeviceName[CCHDEVICENAME];
  WORD  dmSpecVersion;
  WORD  dmDriverVersion;
  WORD  dmSize;
  WORD  dmDriverExtra;
  DWORD dmFields;
  union {
    struct {
      short dmOrientation;
      short dmPaperSize;
      short dmPaperLength;
      short dmPaperWidth;
      short dmScale;
      short dmCopies;
      short dmDefaultSource;
      short dmPrintQuality;
    } DUMMYSTRUCTNAME;
    POINTL dmPosition;
    struct {
      POINTL dmPosition;
      DWORD  dmDisplayOrientation;
      DWORD  dmDisplayFixedOutput;
    } DUMMYSTRUCTNAME2;
  } DUMMYUNIONNAME;
  short dmColor;
  short dmDuplex;
  short dmYResolution;
  short dmTTOption;
  short dmCollate;
  WCHAR dmFormName[CCHFORMNAME];
  WORD  dmLogPixels;
  DWORD dmBitsPerPel;
  DWORD dmPelsWidth;
  DWORD dmPelsHeight;
  union {
    DWORD dmDisplayFlags;
    DWORD dmNup;
  } DUMMYUNIONNAME2;
  DWORD dmDisplayFrequency;
  DWORD dmICMMethod;
  DWORD dmICMIntent;
  DWORD dmMediaType;
  DWORD dmDitherType;
  DWORD dmReserved1;
  DWORD dmReserved2;
  DWORD dmPanningWidth;
  DWORD dmPanningHeight;
} DEVMODEW, *PDEVMODEW, *NPDEVMODEW, *LPDEVMODEW;

成員

dmDeviceName[CCHDEVICENAME]

針對顯示器,指定顯示驅動程式 DLL 的名稱;例如,3Dlabs Permedia3 顯示驅動程式的 “perm3dd”。

針對印表機,指定「易記名稱」;例如,在 PCL/HP LaserJet 案例中為 “PCL/HP LaserJet”。 如果名稱的長度大於 CCHDEVICENAME 字元,多任務緩衝處理器會截斷它以符合陣列。

dmSpecVersion

指定這個 DEVMODEW 結構的版本號碼。 目前的版本號碼是由 wingdi.h 中的DM_SPECVERSION常數所識別。

dmDriverVersion

針對印表機,指定印表機驅動程式開發人員指派的印表機驅動程式版本號碼。

顯示驅動程式可以將此成員設定為DM_SPECVERSION。

dmSize

以位元組為單位指定公用DEVMODEW結構的大小,不包括 dmDriverExtra 成員所識別的任何私用驅動程式指定成員。

dmDriverExtra

指定遵循公用結構成員的私人驅動程序數據位元組數目。 如果設備驅動器未提供私人 DEVMODEW 成員,則此成員應設定為零。

dmFields

指定位旗標,識別下列哪一個 DEVMODEW 成員正在使用中。 例如,當 dmOrientation 成員包含有效數據時,就會設定DM_ORIENTATION旗標。 DM_XXX旗標是在 wingdi.h 中定義。

DUMMYUNIONNAME

DUMMYUNIONNAME.DUMMYSTRUCTNAME

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmOrientation

針對印表機,指定紙張方向。 這個成員可以是DMORIENT_PORTRAIT或DMORIENT_LANDSCAPE。

此成員不會用於顯示。

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmPaperSize

針對印表機,指定要列印的紙張大小。 如果紙張的長度和寬度是由 dmPaperLengthdmPaperWidth 成員指定,這個成員就必須是零。 否則, dmPaperSize 成員必須是 wingdi.h 中定義的其中一個 DMPAPER 前置常數。

此成員不會用於顯示。

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmPaperLength

針對印表機,指定紙張的長度,單位為1/10公厘。 這個值會覆寫 dmPaperSize 成員所指定的紙張長度,如果紙張是自定義大小,或是裝置是點矩陣列印機,則可以列印任意長度的頁面。

此成員不會用於顯示。

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmPaperWidth

針對印表機,指定紙張的寬度,單位為1/10公厘。 這個值會覆寫 dmPaperSize 成員所指定的紙張寬度。 如果使用 dmPaperLength ,則必須使用此成員。

此成員不會用於顯示。

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmScale

針對印表機,指定要針對列印調整影像的百分比。 影像的頁面大小會以 dmScale/100 的因數縮放至實體頁面。 例如,尺規值為 100 的 17 英吋 x 22 英吋影像需要 17x22 英吋紙張,而尺規值為 50 的相同影像應該列印為半角,並符合字母大小的紙張。

此成員不會用於顯示。

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmCopies

針對印表機,如果裝置支援多個複本,則會指定要列印的複本數目。

此成員不會用於顯示。

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmDefaultSource

針對印表機,指定印表機的預設輸入站。 這必須是 wingdi.h 中定義的其中一個 DMBIN 前置常數。 如果指定的常數是DMBIN_FORMSOURCE,則應該會自動選取輸入間隔。

此成員不會用於顯示。

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmPrintQuality

針對印表機,指定印表機解析度。 下列負常數值定義於 wingdi.h 中:

DMRES_HIGH
DMRES_MEDIUM
DMRES_LOW
DMRES_DRAFT

如果指定正值,則表示 x 解析度的 DPI () 每英吋點數,而 y 解析度是由 dmYResolution 指定。

此成員不會用於顯示。

DUMMYUNIONNAME.dmPosition

DUMMYUNIONNAME.DUMMYSTRUCTNAME2

DUMMYUNIONNAME.DUMMYSTRUCTNAME2.dmPosition

針對顯示器,以桌面座標指定 POINTL 結構,其中包含顯示器左上角的 x 和 Y 座標。 這個成員是用來判斷監視在多個監視環境中的相對位置。

此成員不會用於印表機。

DUMMYUNIONNAME.DUMMYSTRUCTNAME2.dmDisplayOrientation

此成員僅針對 Windows XP 和更新版本定義。

針對顯示,指定應該呈現影像的方向。 當 dmFields 成員中未設定DM_DISPLAYORIENTATION位時,此成員必須設定為零。 在 dmFields 成員中設定DM_DISPLAYORIENTATION位時,此成員必須設定為下列其中一個值:

意義
DMDO_DEFAULT 目前模式的顯示裝置方向是裝置的自然方向,應作為預設值使用。
DMDO_90 顯示裝置方向是90度, (從DMDO_DEFAULT的順時針) 測量。
DMDO_180 顯示裝置方向是 180 度, (從DMDO_DEFAULT的順時針) 測量。
DMDO_270 顯示裝置方向是從DMDO_DEFAULT的順時針) 測量 (270 度。
 

此成員不會用於印表機。

如需詳細資訊,請參閱 傳回顯示模式:DrvGetModes

DUMMYUNIONNAME.DUMMYSTRUCTNAME2.dmDisplayFixedOutput

此成員僅針對 Windows XP 和更新版本定義。

針對固定解析度顯示器,指定裝置如何在高解析度顯示器上呈現較低解析度模式。 例如,如果顯示裝置的解析度固定在 1024 X 768,且其模式設定為 640 x 480,則裝置可以在 1024 X 768 螢幕空間內顯示 640 X 480 影像,或延展 640 X 480 影像以填滿較大的螢幕空間。

dmFields 成員中未設定DM_DISPLAYFIXEDOUTPUT位時,此成員必須設定為零。 在 dmFields 成員中設定DM_DISPLAYFIXEDOUTPUT位時,此成員必須設定為下列其中一個值:

意義
DMDFO_CENTER 顯示裝置會在較大的螢幕空間中置中,以顯示較低的解析度模式影像。
DMDFO_STRETCH 顯示裝置藉由延展以顯示較低解析度模式影像,以填滿較大的屏幕空間。
 

此成員不會用於印表機。

如需詳細資訊,請參閱 傳回顯示模式:DrvGetModes

dmColor

針對印表機,指定色彩印表機是否應該列印色彩或單色。 這個成員可以是其中一個DMCOLOR_COLOR或DMCOLOR_MONOCHROME。

此成員不會用於顯示。

dmDuplex

針對印表機,指定雙面印表機的雙面 (雙面) 列印。 此成員可以是下列其中一個值:

DMDUP_HORIZONTAL

使用簡短邊緣系結列印雙面。

DMDUP_SIMPLEX

列印單面。

DMDUP_VERTICAL

使用長邊緣系結列印雙面。

此成員不會用於顯示。

dmYResolution

針對印表機,以 DPI 指定印表機的 Y 解析度。 如果使用這個成員, dmPrintQuality 成員會指定 x 解析度。

此成員不會用於顯示。

dmTTOption

針對印表機,指定應該如何列印 TrueType 字型。 此成員必須是 wingdi.h 中定義的其中一個 DMTT 前置常數。

此成員不會用於顯示。

dmCollate

針對印表機,指定是否應該定序多個複本。 這個成員可以是下列其中一個值:

DMCOLLATE_TRUE

列印多個複本時進行定序。

DMCOLLATE_FALSE

列印多個複本時請勿定序。

此成員不會用於顯示。

dmFormName[CCHFORMNAME]

針對印表機,指定要使用的表單名稱;例如「信件」或「法律」。 這必須是可藉由呼叫 Win32 EnumForms 函式來取得的名稱。

此成員不會用於顯示。

dmLogPixels

針對顯示器,指定顯示裝置的每英吋邏輯圖元數目,而且應該等於 GDIINFO 結構的 ulLogPixels 成員。

此成員不會用於印表機。

dmBitsPerPel

針對顯示器,指定顯示裝置的每圖元位數的色彩解析度。

此成員不會用於印表機。

dmPelsWidth

針對顯示器,指定可見裝置表面的寬度,以像素為單位。

此成員不會用於印表機。

dmPelsHeight

針對顯示,指定可見裝置表面的高度,以像素為單位。

此成員不會用於印表機。

DUMMYUNIONNAME2

DUMMYUNIONNAME2.dmDisplayFlags

指定裝置的顯示模式。 這個成員可以是下列值的組合。

意義
DM_GRAYSCALE 指定顯示器是非色彩裝置。 如果未設定此旗標,則會假設色彩。 此旗標已不再有效。
DM_INTERLACED 指定顯示模式交錯。 如果未設定旗標,則會假設非交集。

顯示驅動程式會使用此成員;例如, 在 ChangeDisplaySettings 函式中。 印表機驅動程式不會使用此成員。

DUMMYUNIONNAME2.dmNup

針對印表機,指定列印系統是否會在單一實體頁面) 上播放多個EMF邏輯頁面 (處理「N-up」列印。 這個成員的值可以是下列其中一項:

意義
DMNUP_SYSTEM 列印系統會處理 「N-up」 列印。
DMNUP_ONEUP 列印系統不會處理 「N-up」 列印。 如果應用程式想要自行執行「N-up」列印,應用程式可以將 dmNup 設定為DMNUP_ONEUP。
 

此成員不會用於顯示。

dmDisplayFrequency

針對顯示器,指定目前模式中顯示裝置的頻率,以 hertz 為單位。

此成員不會用於印表機。

dmICMMethod

指定 在 wingdi.h 中定義的其中一個 DMICMMETHOD 前置常數。

dmICMIntent

指定 在 wingdi.h 中定義的其中一個 DMICM 前置常數。

dmMediaType

指定 在 wingdi.h 中定義的其中一個 DMMEDIA 前置常數。

dmDitherType

指定 在 wingdi.h 中定義的其中一個 DMDITHER 前置常數。

dmReserved1

保留供系統使用,驅動程式應忽略。

dmReserved2

保留供系統使用,驅動程式應忽略。

dmPanningWidth

保留供系統使用,驅動程式應忽略。

dmPanningHeight

保留供系統使用,驅動程式應忽略。

備註

DEVMODEW 結構是 devMODE 結構的 Unicode 版本, (Microsoft Windows SDK 檔) 中所述。 雖然應用程式可以使用結構的 ANSI 或 Unicode 版本,但必須使用 Unicode 版本。

對於印表機驅動程式,DEVMODEW 結構用於指定印印檔所需的印表機特性。 它也會用於指定印表機的預設特性。

緊接在 DEVMODEW 結構的已定義成員 (通常稱為其公用成員) 之後,可能會有一組驅動程式定義成員 (通常稱為私人 DEVMODEW 成員) 。 驅動程式會提供 dmDriverExtra 中這個私人區域的大小,以位元組為單位。 驅動程式定義的私人成員可供驅動程序獨佔使用。 私人成員的起始位址可以使用 dmSize 成員來參考,如下所示:

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

驅動程式可以依賴多任務緩衝處理器來傳遞不小於 (dmSize + dmDriverExtra) 個字節的 DEVMODEW 緩衝區。 因此,驅動程式可以安全地讀取從緩衝區開頭開始的位元元組數目,而不會造成存取違規,而不需要探查記憶體。

在播放EMF之前,GDI會呼叫多任務緩衝器來驗證DEVMODEW緩衝區的公用部分內容。 如果 DEVMODEW 緩衝區未通過在多任務緩衝處理程式中執行的驗證測試,GDI 不會將緩衝區傳遞至印表機驅動程式。

警告 Windows 只會確認 DEVMODEW 的公用部分有效。 不過,結構私用部分損毀的數據可能會導致驅動程式程式代碼在應用程式或多任務緩衝處理程式中損毀。 因此,在每次使用 DEVMODEW 數據之前,驅動程式應該先確認 DEVMODEW 的私人部分格式正確。
 
在 Windows 2000 中,新的 等位 成員已新增至 DEVMODEW 結構。 這個 等位 成員包含現有的 DEVMODEW 結構成員 dmDisplayFlags,以及新的成員 dmNup。 上述成員一節會說明此成員。

在 Windows XP 中,已新增 結構 成員。 此 結構 成員包含現有的 DEVMODEW 結構成員 dmPosition,以及兩個新成員 dmDisplayOrientationdmDisplayFixedOutput。 上述成員一節會說明這些成員。

此外,針對 Windows XP,DEVMODEW 結構的數個成員已移至此結構中的不同位置。 dmScaledmCopiesdmDefaultSourcedmPrintQuality 成員已附加至包含 dmOrientationdmPaperSize、dmPaperLengthdmPaperWidth 成員的結構成員。

注意

wingdi.h 標頭會將 DEVMODE 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例

規格需求

需求
標頭 wingdi.h (包括 Wingdi.h)

另請參閱

DOCUMENTPROPERTYHEADER

DrvConvertDevMode

DrvDeviceCapabilities

DrvGetModes