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 案例中為 “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 | 顯示裝置方向是從DMDO_DEFAULT的90度(逆時針測量)。 |
| DMDO_180 | 顯示裝置方向是從DMDO_DEFAULT的 180 度(逆時針測量)。 |
| 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]
針對印表機,指定要使用的表單名稱;例如“Letter” 或 “Legal”。 這必須是可藉由呼叫 Win32 EnumForms 函 式來取得的名稱。
此成員不會用於顯示。
dmLogPixels
針對顯示器,會指定顯示裝置的每英吋邏輯圖元數目,且應該等於 GDIINFO 結構的 ulLogPixels 成員。
此成員不會用於印表機。
dmBitsPerPel
針對顯示器,指定顯示裝置的每圖元位的色彩解析度。
此成員不會用於印表機。
dmPelsWidth
針對顯示器,指定可見裝置表面的寬度,以像素為單位。
此成員不會用於印表機。
dmPelsHeight
針對顯示,指定可見裝置表面的高度,以像素為單位。
此成員不會用於印表機。
DUMMYUNIONNAME2
DUMMYUNIONNAME2.dmDisplayFlags
指定裝置的顯示模式。 這個成員可以是下列值的組合。
| 價值觀 | 意義 |
|---|---|
| DM_GRAYSCALE | 指定顯示器為非色彩裝置。 如果未設定此旗標,則會假設色彩。 此旗標已不再有效。 |
| DM_INTERLACED | 指定顯示模式交錯。 如果未設定旗標,則會假設為 noninterlaced。 |
顯示驅動程式會使用此成員;例如,在 ChangeDisplaySettings 函式中。 印表機驅動程式不會使用此成員。
DUMMYUNIONNAME2.dmNup
針對印表機,指定列印系統是否處理「N-up」列印(在單一實體頁面上播放多個 EMF 邏輯頁面)。 這個成員的值可以是下列其中一項:
| 價值觀 | 意義 |
|---|---|
| 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 標頭會根據 UNICODE 預處理器常數的定義,將 DEVMODE 定義為自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型 的慣例。
需求
| 要求 | 價值觀 |
|---|---|
| 頁首 | wingdi.h (包括 Wingdi.h) |