Structure DEVMODEW (wingdi.h)

La structure DEVMODEW est utilisée pour spécifier les caractéristiques des appareils d’affichage et d’impression dans le jeu de caractères Unicode (large).

Syntaxe

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;

Membres

dmDeviceName[CCHDEVICENAME]

Pour un affichage, spécifie le nom de la DLL du pilote d’affichage ; par exemple, « perm3dd » pour le pilote d’affichage Permedia3 3Dlabs.

Pour une imprimante, spécifie le « nom convivial » ; par exemple, « PCL/HP LaserJet » dans le cas de PCL/HP LaserJet. Si le nom est supérieur à la longueur des caractères CCHDEVICENAME, le spouleur le tronque pour le tenir dans le tableau.

dmSpecVersion

Spécifie le numéro de version de cette structure DEVMODEW. Le numéro de version actuel est identifié par la constante DM_SPECVERSION dans wingdi.h.

dmDriverVersion

Pour une imprimante, spécifie le numéro de version du pilote d’imprimante attribué par le développeur du pilote d’imprimante.

Les pilotes d’affichage peuvent définir ce membre sur DM_SPECVERSION.

dmSize

Spécifie la taille en octets de la structure DEVMODEW publique, sans inclure les membres privés spécifiés par le pilote identifiés par le membre dmDriverExtra .

dmDriverExtra

Spécifie le nombre d’octets de données de pilote privé qui suivent les membres de la structure publique. Si un pilote de périphérique ne fournit pas de membres DEVMODEW privés, ce membre doit être défini sur zéro.

dmFields

Spécifie les indicateurs de bits qui identifient les membres DEVMODEW suivants qui sont en cours d’utilisation. Par exemple, l’indicateur DM_ORIENTATION est défini lorsque le membre dmOrientation contient des données valides. Les indicateurs DM_XXX sont définis dans wingdi.h.

DUMMYUNIONNAME

DUMMYUNIONNAME.DUMMYSTRUCTNAME

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmOrientation

Pour les imprimantes, spécifie l’orientation du papier. Ce membre peut être DMORIENT_PORTRAIT ou DMORIENT_LANDSCAPE.

Ce membre n’est pas utilisé pour les affichages.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmPaperSize

Pour les imprimantes, spécifie la taille du papier sur lequel imprimer. Ce membre doit être égal à zéro si la longueur et la largeur du papier sont spécifiées par les membres dmPaperLength et dmPaperWidth . Sinon, le membre dmPaperSize doit être l’une des constantes préfixées DMPAPER définies dans wingdi.h.

Ce membre n’est pas utilisé pour les affichages.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmPaperLength

Pour les imprimantes, spécifie la longueur du papier, en unités de 1/10 millimètre. Cette valeur remplace la longueur du papier spécifiée par le membre dmPaperSize et est utilisée si le papier est d’une taille personnalisée ou si l’appareil est une imprimante à matrice de points, qui peut imprimer une page de longueur arbitraire.

Ce membre n’est pas utilisé pour les affichages.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmPaperWidth

Pour les imprimantes, spécifie la largeur du papier, en unités de 1/10 millimètre. Cette valeur remplace la largeur du papier spécifiée par le membre dmPaperSize . Ce membre doit être utilisé si dmPaperLength est utilisé.

Ce membre n’est pas utilisé pour les affichages.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmScale

Pour les imprimantes, spécifie le pourcentage selon lequel l’image doit être mise à l’échelle pour l’impression. La taille de page de l’image est mise à l’échelle sur la page physique par un facteur dmScale/100. Par exemple, une image de 17 pouces sur 22 pouces avec une valeur d’échelle de 100 nécessite un papier de 17 x 22 pouces, tandis que la même image avec une valeur d’échelle de 50 doit être imprimée en demi-taille et tenir sur du papier au format lettre.

Ce membre n’est pas utilisé pour les affichages.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmCopies

Pour les imprimantes, spécifie le nombre de copies à imprimer, si l’appareil prend en charge plusieurs copies.

Ce membre n’est pas utilisé pour les affichages.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmDefaultSource

Pour les imprimantes, spécifie le bac d’entrée par défaut de l’imprimante. Il doit s’agir de l’une des constantes préfixées DMBIN définies dans wingdi.h. Si la constante spécifiée est DMBIN_FORMSOURCE, la corbeille d’entrée doit être sélectionnée automatiquement.

Ce membre n’est pas utilisé pour les affichages.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmPrintQuality

Pour les imprimantes, spécifie la résolution de l’imprimante. Les valeurs de constante négative suivantes sont définies dans wingdi.h :

DMRES_HIGH
DMRES_MEDIUM
DMRES_LOW
DMRES_DRAFT

Si une valeur positive est spécifiée, elle représente le nombre de points par pouce (PPP) pour la résolution x , et la résolution y est spécifiée par dmYResolution.

Ce membre n’est pas utilisé pour les affichages.

DUMMYUNIONNAME.dmPosition

DUMMYUNIONNAME.DUMMYSTRUCTNAME2

DUMMYUNIONNAME.DUMMYSTRUCTNAME2.dmPosition

Pour les affichages, spécifie une structure POINTL contenant les coordonnées x et y du coin supérieur gauche de l’affichage, dans les coordonnées du bureau. Ce membre est utilisé pour déterminer la position relative des moniteurs dans un environnement à plusieurs moniteurs.

Ce membre n’est pas utilisé pour les imprimantes.

DUMMYUNIONNAME.DUMMYSTRUCTNAME2.dmDisplayOrientation

Ce membre est défini uniquement pour Windows XP et versions ultérieures.

Pour les affichages, spécifie l’orientation à laquelle les images doivent être présentées. Lorsque le bit DM_DISPLAYORIENTATION n’est pas défini dans le membre dmFields , ce membre doit être défini sur zéro. Lorsque le DM_DISPLAYORIENTATION bit est défini dans le membre dmFields , ce membre doit être défini sur l’une des valeurs suivantes :

Valeur Signification
DMDO_DEFAULT L’orientation de l’appareil d’affichage du mode actuel est l’orientation naturelle de l’appareil et doit être utilisée comme valeur par défaut.
DMDO_90 L’orientation de l’appareil d’affichage est de 90 degrés (mesurée dans le sens des aiguilles d’une montre) par rapport à celle de DMDO_DEFAULT.
DMDO_180 L’orientation de l’appareil d’affichage est de 180 degrés (mesurée dans le sens des aiguilles d’une montre) de celle de DMDO_DEFAULT.
DMDO_270 L’orientation de l’appareil d’affichage est de 270 degrés (mesurée dans le sens des aiguilles d’une montre) par rapport à celle de DMDO_DEFAULT.
 

Ce membre n’est pas utilisé pour les imprimantes.

Pour plus d’informations, consultez Modes d’affichage de retour : DrvGetModes.

DUMMYUNIONNAME.DUMMYSTRUCTNAME2.dmDisplayFixedOutput

Ce membre est défini uniquement pour Windows XP et versions ultérieures.

Pour les affichages à résolution fixe, spécifie comment l’appareil peut présenter un mode de résolution inférieure sur un écran à résolution supérieure. Par exemple, si la résolution d’un périphérique d’affichage est fixée à 1024 x 768 et que son mode est défini sur 640 x 480, l’appareil peut afficher une image de 640 x 480 dans l’espace d’écran de 1024 x 768, ou étirer l’image de 640 x 480 pour remplir l’espace d’écran plus grand.

Lorsque le bit DM_DISPLAYFIXEDOUTPUT n’est pas défini dans le membre dmFields , ce membre doit être défini sur zéro. Lorsque le bit DM_DISPLAYFIXEDOUTPUT est défini dans le membre dmFields , ce membre doit être défini sur l’une des valeurs suivantes :

Valeur Signification
DMDFO_CENTER L’appareil d’affichage présente une image en mode résolution inférieure en la centrant dans l’espace d’écran plus grand.
DMDFO_STRETCH L’appareil d’affichage présente une image en mode de résolution inférieure en l’étirant pour remplir l’espace d’écran plus grand.
 

Ce membre n’est pas utilisé pour les imprimantes.

Pour plus d’informations, consultez Modes d’affichage de retour : DrvGetModes.

dmColor

Pour les imprimantes, spécifie si une imprimante couleur doit imprimer en couleur ou en monochrome. Ce membre peut être l’un des DMCOLOR_COLOR ou DMCOLOR_MONOCHROME.

Ce membre n’est pas utilisé pour les affichages.

dmDuplex

Pour les imprimantes, spécifie l’impression recto verso (recto-verso) pour les imprimantes compatibles duplex. Ce membre peut être l’une des valeurs suivantes :

DMDUP_HORIZONTAL

Imprimez recto verso à l’aide d’une liaison à bord court.

DMDUP_SIMPLEX

Imprimer une face unique.

DMDUP_VERTICAL

Imprimez recto verso à l’aide d’une liaison de bord long.

Ce membre n’est pas utilisé pour les affichages.

dmYResolution

Pour les imprimantes, spécifie la résolution y de l’imprimante, en PPP. Si ce membre est utilisé, le membre dmPrintQuality spécifie la résolution x .

Ce membre n’est pas utilisé pour les affichages.

dmTTOption

Pour les imprimantes, spécifie la façon dont les polices TrueType doivent être imprimées. Ce membre doit être l’une des constantes préfixées DMTT définies dans wingdi.h.

Ce membre n’est pas utilisé pour les affichages.

dmCollate

Pour les imprimantes, spécifie si plusieurs copies doivent être rassemblées. Ce membre peut avoir l’une des valeurs suivantes :

DMCOLLATE_TRUE

Collez lors de l’impression de plusieurs copies.

DMCOLLATE_FALSE

Ne collez pas lors de l’impression de plusieurs copies.

Ce membre n’est pas utilisé pour les affichages.

dmFormName[CCHFORMNAME]

Pour les imprimantes, spécifie le nom du formulaire à utiliser ; par exemple , « Lettre » ou « Juridique ». Il doit s’agir d’un nom qui peut être obtenu en appelant la fonction Win32 EnumForms .

Ce membre n’est pas utilisé pour les affichages.

dmLogPixels

Pour les affichages, spécifie le nombre de pixels logiques par pouce d’un périphérique d’affichage et doit être égal au membre ulLogPixels de la structure GDIINFO .

Ce membre n’est pas utilisé pour les imprimantes.

dmBitsPerPel

Pour les affichages, spécifie la résolution de couleur, en bits par pixel, d’un périphérique d’affichage.

Ce membre n’est pas utilisé pour les imprimantes.

dmPelsWidth

Pour les affichages, spécifie la largeur, en pixels, de la surface visible de l’appareil.

Ce membre n’est pas utilisé pour les imprimantes.

dmPelsHeight

Pour les affichages, spécifie la hauteur, en pixels, de la surface visible de l’appareil.

Ce membre n’est pas utilisé pour les imprimantes.

DUMMYUNIONNAME2

DUMMYUNIONNAME2.dmDisplayFlags

Spécifie le mode d’affichage de l’appareil. Ce membre peut être une combinaison des valeurs suivantes.

Valeur Signification
DM_GRAYSCALE Spécifie que l’affichage est un appareil non coloré. Si cet indicateur n’est pas défini, la couleur est supposée. Cet indicateur n’est plus valide.
DM_INTERLACED Spécifie que le mode d’affichage est entrelacé. Si l’indicateur n’est pas défini, non interlacé est supposé.

Les pilotes d’affichage utilisent ce membre ; par exemple, dans la fonction ChangeDisplaySettings . Les pilotes d’imprimante n’utilisent pas ce membre.

DUMMYUNIONNAME2.dmNup

Pour les imprimantes, spécifie si le système d’impression gère l’impression « N-up » (lecture de plusieurs pages logiques EMF sur une seule page physique). La valeur de ce membre peut être l’une des suivantes :

Valeur Signification
DMNUP_SYSTEM Le système d’impression gère l’impression « N-up ».
DMNUP_ONEUP Le système d’impression ne gère pas l’impression « N-up ». Une application peut définir dmNup sur DMNUP_ONEUP si elle a l’intention d’effectuer seule l’impression « N-up ».
 

Ce membre n’est pas utilisé pour les affichages.

dmDisplayFrequency

Pour les affichages, spécifie la fréquence, en hertz, d’un périphérique d’affichage dans son mode actuel.

Ce membre n’est pas utilisé pour les imprimantes.

dmICMMethod

Spécifie l’une des constantes préfixées DMICMMETHOD définies dans wingdi.h.

dmICMIntent

Spécifie l’une des constantes préfixées DMICM définies dans wingdi.h.

dmMediaType

Spécifie l’une des constantes préfixées DMMEDIA définies dans wingdi.h.

dmDitherType

Spécifie l’une des constantes préfixées DMDITHER définies dans wingdi.h.

dmReserved1

Est réservé à l’utilisation du système et doit être ignoré par le pilote.

dmReserved2

Est réservé à l’utilisation du système et doit être ignoré par le pilote.

dmPanningWidth

Est réservé à l’utilisation du système et doit être ignoré par le pilote.

dmPanningHeight

Est réservé à l’utilisation du système et doit être ignoré par le pilote.

Remarques

La structure DEVMODEW est la version Unicode de la structure DEVMODE (décrite dans la documentation Microsoft Windows SDK). Bien que les applications puissent utiliser la version ANSI ou Unicode de la structure, les pilotes sont requis pour utiliser la version Unicode.

Pour les pilotes d’imprimante, la structure DEVMODEW est utilisée pour spécifier les caractéristiques d’imprimante requises par un document d’impression. Il est également utilisé pour spécifier les caractéristiques par défaut d’une imprimante.

Immédiatement après les membres définis d’une structure DEVMODEW (souvent appelés membres publics), il peut y avoir un ensemble de membres définis par le pilote (souvent appelés membres DEVMODEW privés). Le pilote fournit la taille, en octets, de cette zone privée dans dmDriverExtra. Les membres privés définis par le pilote sont destinés à une utilisation exclusive par le pilote. L’adresse de départ des membres privés peut être référencée à l’aide du membre dmSize comme suit :

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

Un pilote peut s’appuyer sur le spouleur pour passer une mémoire tampon DEVMODEW qui n’est pas inférieure à (dmSize + dmDriverExtra) octets. Par conséquent, le pilote peut lire en toute sécurité ce nombre d’octets à partir du début de la mémoire tampon sans provoquer de violation d’accès et sans avoir à sonder la mémoire.

Avant de lire EMF, GDI appelle le spouleur pour valider le contenu de la partie publique de la mémoire tampon DEVMODEW. Si la mémoire tampon DEVMODEW ne passe pas les tests de validation effectués dans le spouleur, GDI ne transmet pas la mémoire tampon au pilote d’imprimante.

Avertissement Windows confirme uniquement que la partie publique de DEVMODEW est valide. Toutefois, des données endommagées dans la partie privée de la structure peuvent provoquer le blocage du code du pilote dans l’application ou dans le processus du spouleur. Par conséquent, avant chaque utilisation des données DEVMODEW, le pilote doit vérifier que la partie privée de DEVMODEW est bien formée.
 
Dans Windows 2000, un nouveau membre d’union a été ajouté à la structure DEVMODEW. Ce membre d’union contient un membre de structure DEVMODEW existant, dmDisplayFlags, ainsi qu’un nouveau membre, dmNup. Ce membre est décrit dans la section Membres précédente.

Dans Windows XP, un nouveau membre de struct a été ajouté. Ce membre de struct contient un membre de structure DEVMODEW existant, dmPosition, ainsi que deux nouveaux membres, dmDisplayOrientation et dmDisplayFixedOutput. Ces membres sont décrits dans la section Membres précédente.

De même, pour Windows XP, plusieurs membres de la structure DEVMODEW ont été déplacés vers différents emplacements dans cette structure. Les membres dmScale, dmCopies, dmDefaultSource et dmPrintQuality ont été ajoutés au membre struct contenant les membres dmOrientation, dmPaperSize, dmPaperLength et dmPaperWidth .

Notes

L’en-tête wingdi.h définit DEVMODE en tant qu’alias qui sélectionne automatiquement la version ANSI ou Unicode de cette fonction en fonction de la définition de la constante de préprocesseur UNICODE. La combinaison de l’utilisation de l’alias neutre en encodage avec du code qui n’est pas neutre en encodage peut entraîner des incompatibilités qui entraînent des erreurs de compilation ou d’exécution. Pour plus d’informations, consultez Conventions pour les prototypes de fonction.

Configuration requise

Condition requise Valeur
En-tête wingdi.h (inclure Wingdi.h)

Voir aussi

DOCUMENTPROPERTYHEADER

DrvConvertDevMode

DrvDeviceCapabilities

DrvGetModes