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
針對印表機,指定要列印的紙張大小。 如果紙張的長度和寬度是由 dmPaperLength 和 dmPaperWidth 成員指定,這個成員就必須是零。 否則, 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 XP 中,已新增 結構 成員。 此 結構 成員包含現有的 DEVMODEW 結構成員 dmPosition,以及兩個新成員 dmDisplayOrientation 和 dmDisplayFixedOutput。 上述成員一節會說明這些成員。
此外,針對 Windows XP,DEVMODEW 結構的數個成員已移至此結構中的不同位置。 dmScale、dmCopies、dmDefaultSource 和 dmPrintQuality 成員已附加至包含 dmOrientation、dmPaperSize、dmPaperLength 和 dmPaperWidth 成員的結構成員。
注意
wingdi.h 標頭會將 DEVMODE 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例。
規格需求
需求 | 值 |
---|---|
標頭 | wingdi.h (包括 Wingdi.h) |