DEVMODEW

typedef struct _DEVMODEW {
    WCHAR  dmDeviceName[CCHDEVICENAME];
    WORD   dmSpecVersion;
    WORD   dmDriverVersion;
    WORD   dmSize;
    WORD   dmDriverExtra;
    DWORD  dmFields;
    short  dmOrientation;
    short  dmPaperSize;
    short  dmPaperLength;
    short  dmPaperWidth;
    short  dmScale;
    short  dmCopies;
    short  dmDefaultSource;
    short  dmPrintQuality;
    short  dmColor;
    short  dmDuplex;
    short  dmYResolution;
    short  dmTTOption;
    short  dmCollate;
    WCHAR  dmFormName[CCHFORMNAME];
    WORD   dmLogPixels;
    DWORD  dmBitsPerPel;
    DWORD  dmPelsWidth;
    DWORD  dmPelsHeight;
    DWORD  dmDisplayFlags;
    DWORD  dmDisplayFrequency;
} DEVMODEW;

The DEVMODEW structure contains information about the device initialization and environment of a printer.

Members

dmDeviceName
Specifies the name of the device the driver supports; for example, “PCL/HP LaserJet” in the case of PCL/HP LaserJet®. If the name is greater than CCHDEVICENAME characters in length, the spooler truncates it to fit in the array.
dmSpecVersion
Specifies the version number of the initialization data specification on which the structure is based.
dmDriverVersion
Specifies the printer driver version number assigned by the printer driver developer.
dmSize
Specifies the size, in bytes, of the DEVMODEW structure minus the device-specific dmDriverData member. If an application manipulates only the driver-independent portion of the data, it can use this member to determine the size of the structure without having to account for different versions.
dmDriverExtra
Specifies the number of bytes of private driver data that follow this structure. If a device driver does not use device-specific information, this member should be set to zero.
dmFields
Specifies which of the remaining members in the DEVMODEW structure have been initialized. Bit zero (defined as DM_ORIENTATION) specifies dmOrientation; bit one (defined as DM_PAPERSIZE) specifies dmPaperSize, and so on. A printer driver should support only those members that are appropriate for the printer technology.
dmOrientation
Specifies the paper orientation. This member can be either DMORIENT_PORTRAIT or DMORIENT_LANDSCAPE.
dmPaperSize
Specifies the size of the paper to be printed on. This member can be zero if the length and width of the paper are both specified by the dmPaperLength and dmPaperWidth members. Otherwise, the dmPaperSize member can be set to one of the following predefined values:

Value

Meaning

DMPAPER_LETTER

Letter, 8-1/2 by 11 in.

DMPAPER_LEGAL

Legal, 8-1/2 by 14 in.

DMPAPER_A4

A4 Sheet, 210 by 297 mm.

DMPAPER_CSHEET

C Sheet, 17 by 22 in.

DMPAPER_DSHEET

D Sheet, 22 by 34 in.

DMPAPER_ESHEET

E Sheet, 34 by 44 in.

DMPAPER_LETTERSMALL

Letter Small, 8-1/2 by 11 in.

DMPAPER_TABLOID

Tabloid, 11 by 17 in.

DMPAPER_LEDGER

Ledger, 17 by 11 in.

DMPAPER_STATEMENT

Statement, 5-1/2 by 8-1/2 in.

DMPAPER_EXECUTIVE

Executive, 7-1/4 by 10-1/2 in.

DMPAPER_A3

A3 sheet, 297 by 420 mm.

DMPAPER_A4SMALL

A4 small sheet, 210 by 297 mm.

DMPAPER_A5

A5 sheet, 148 by 210 mm.

DMPAPER_B4

B4 sheet, 250 by 354 mm.

DMPAPER_B5

B5 sheet, 182 by 257 mm.

DMPAPER_FOLIO

Folio, 8-1/2 by 13 in.

DMPAPER_QUARTO

Quarto, 215 by 275 mm.

DMPAPER_10X14

10 by 14 in.

DMPAPER_11X17

11 by 17 in.

DMPAPER_NOTE

Note, 8-1/2 by 11 in.

DMPAPER_ENV_9

#9 Envelope, 3-7/8 by 8-7/8 in.

DMPAPER_ENV_10

#10 Envelope, 4-1/8 by 9-1/2 in.

DMPAPER_ENV_11

#11 Envelope, 4-1/2 by 10-3/8 in.

DMPAPER_ENV_12

#12 Envelope, 4-3/4 by 11 in.

DMPAPER_ENV_14

#14 Envelope, 5 by 11-1/2 in.

DMPAPER_ENV_DL

DL Envelope, 110 by 220 mm.

DMPAPER_ENV_C5

C5 Envelope, 162 by 229 mm.

DMPAPER_ENV_C3

C3 Envelope, 324 by 458 mm.

DMPAPER_ENV_C4

C4 Envelope, 229 by 324 mm.

DMPAPER_ENV_C6

C6 Envelope, 114 by 162 mm.

DMPAPER_ENV_C65

C65 Envelope, 114 by 229 mm.

DMPAPER_ENV_B4

B4 Envelope, 250 by 353 mm.

DMPAPER_ENV_B5

B5 Envelope, 176 by 250 mm.

DMPAPER_ENV_B6

B6 Envelope, 176 by 125 mm.

DMPAPER_ENV_ITALY

Italy Envelope, 110 by 230 mm.

DMPAPER_ENV_MONARCH

Monarch Envelope, 3-7/8 by 7-1/2 in.

DMPAPER_ENV_PERSONAL

6-3/4 Envelope, 3-5/8 by 6-1/2 in.

DMPAPER_FANFOLD_US

US Std Fanfold, 14-7/8 by 11 in.

DMPAPER_FANFOLD_STD_GERMAN

German Std Fanfold, 8-1/2 by 12 in.

DMPAPER_FANFOLD_LGL_GERMAN

German Legal Fanfold, 8-1/2 by 13 in.

dmPaperLength
Specifies the length of the paper. This value overrides the length of the paper specified by the dmPaperSize member. This might be necessary if the paper is of a custom size, or the device is a dot matrix printer, which can print a page of arbitrary length. This value, along with all values in this structure that specify a physical length, is specified in units of 1/10 of a millimeter.
dmPaperWidth
Specifies the width of the paper. This value overrides the width of the paper specified by the dmPaperSize member. This value is specified in units of 1/10 of a millimeter.
dmScale
Specifies the factor by which the printed output is to be scaled. The apparent page size is scaled from the physical page size by a factor of dmScale/100. For example, a letter-sized page with a dmScale value of 50 contains as much data as a page of 17 by 22 inches because the output text and graphics are half their original height and width.
dmCopies
Specifies the number of copies printed if the device supports multiple copies.
dmDefaultSource
Reserved; must be zero.
dmPrintQuality
Specifies the printer resolution. There are four predefined device-independent values:
DMRES_HIGH
DMRES_MEDIUM
DMRES_LOW
DMRES_DRAFT
If a positive value is given, it specifies the number of dots per inch (DPI) and is therefore device-dependent.
dmColor
Specifies whether a color printer should print color or monochrome. This member can be one of the following values:

DMCOLOR_COLOR
DMCOLOR_MONOCHROME

dmDuplex
Specifies duplex (double-sided) printing for duplex-capable printers. This member can be one of the following values:

DMDUP_SIMPLEX
DMDUP_HORIZONTAL
DMDUP_VERTICAL

dmYResolution
Specifies the y resolution of the printer, in DPI. If the printer initializes this member, the dmPrintQuality member specifies the x resolution of the printer, in DPI.
dmTTOption
Specifies how TrueType® fonts should be printed. This member can be one of the following values:

Value

Meaning

DMTT_BITMAP

Prints TrueType fonts as graphics. This is the default for dot-matrix printers.

DMTT_DOWNLOAD

Downloads TrueType fonts as soft fonts. This is the default for Hewlett-Packard printers that use Printer Control Language (PCL).

DMTT_SUBDEV

Substitute device fonts for TrueType fonts. This is the default for PostScript® printers.

dmCollate
Specifies whether collation should be used when printing multiple copies. This member can be be one of the following values:

Value

Meaning

DMCOLLATE_TRUE

Collate when printing multiple copies.

DMCOLLATE_FALSE

Do not collate when printing multiple copies.

Specifying DMCOLLATE_FALSE provides faster output because the data is sent to a printer only once, no matter how many copies are required.

dmFormName
Specifies the name of the form to use; for example, “Letter” or “Legal”. A complete set of names can be retrieved using the EnumForms function.
dmLogPixels
Specifies the number of log pixels in the x direction. This member should be equal to the ulLogPixels member of the GDIINFO structure.
dmBitsPerPel
Specifies the color resolution of the display device, in bits per pixel. For example: 4 for 16 colors, 8 for 256 colors, or 16 for 65536 colors.
dmPelsWidth
Specifies the width in pixels of the visible device surface.
dmPelsHeight
Specifies the height in pixels of the visible device surface.
dmDisplayFlags
Specifies the device’s display mode. The following are valid flags:

Value

Meaning

DM_GRAYSCALE

Specifies that the display is not a color device. If this flag is not set, color is assumed.

DM_INTERLACED

Specifies that the display mode is interlaced. If the flag is not set, noninterlaced is assumed.

dmDisplayFrequency
Specifies the frequency, in hertz, of the display device in its current mode.

Comments

This structure is an extension of the Windows 3.1 DEVMODE structure.

A device driver’s private data follows the dmDisplayMode member. The number of bytes of private data is specified by the dmDriverExtra member.

An application can set several of these members, like dmCopies and dmOrientation, that are common among several drivers. This allows an application to make simple mode selections without calling the driver-supplied DrvDeviceModes function.

The DEVMODEW structure is followed immediately by dmDriverExtra bytes of driver data. This data is set only by DrvGetModes, and is therefore driver-defined. The driver should not assume that it can calculate the size of the DEVMODEW structure, but instead should use the size specified by the dmSize member.

The driver data begins at the address pointed to by:

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

See Also

DrvGetModes, GDIINFO