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 显示设备方向为 270 度, (从 DMDO_DEFAULT 的顺时针) 测量。
 

此成员不用于打印机。

有关详细信息,请参阅 返回显示模式: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

对于打印机,指定打印机的 y 分辨率(以 DPI 为单位)。 如果使用此成员, 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 指定交错显示模式。 如果未设置标志,则假定为非交错。

显示驱动程序使用此成员;例如,在 ChangeDisplaySettings 函数中 。 打印机驱动程序不使用此成员。

DUMMYUNIONNAME2.dmNup

对于打印机,指定打印系统是否处理“N-up”打印 (在单个物理页上播放多个 EMF 逻辑页) 。 此成员的值可以是下列值之一:

含义
DMNUP_SYSTEM 打印系统处理“N-up”打印。
DMNUP_ONEUP 打印系统不处理“N-up”打印。 如果应用程序打算自行执行“N-up”打印,则可以将 dmNup 设置为 DMNUP_ONEUP。
 

此成员不用于显示。

dmDisplayFrequency

对于显示器,指定当前模式下显示设备的频率(以赫为单位)。

此成员不用于打印机。

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 成员已追加到包含 dmOrientationdmPaperSizedmPaperLengthdmPaperWidth 成员的结构成员。

注意

wingdi.h 标头将 DEVMODE 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定

要求

要求
Header wingdi.h (包括 Wingdi.h)

另请参阅

DOCUMENTPROPERTYHEADER

DrvConvertDevMode

DrvDeviceCapabilities

DrvGetModes