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

dmDriverExtra メンバーによって識別されるドライバー指定のプライベート メンバーを含まない、パブリック DEVMODEW 構造体のサイズをバイト単位で指定します。

dmDriverExtra

パブリック構造体メンバーに続くプライベート ドライバー データのバイト数を指定します。 デバイス ドライバーがプライベート DEVMODEW メンバーを提供しない場合は、このメンバーを 0 に設定する必要があります。

dmFields

次の DEVMODEW メンバーのうち、使用されているメンバーを識別するビット フラグを指定します。 たとえば、 dmOrientation メンバーに有効なデータが含まれている場合、DM_ORIENTATION フラグが設定されます。 DM_XXX フラグは wingdi.h で定義されています。

DUMMYUNIONNAME

DUMMYUNIONNAME.DUMMYSTRUCTNAME

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmOrientation

プリンターの場合は、用紙の向きを指定します。 このメンバーは、DMORIENT_PORTRAITまたはDMORIENT_LANDSCAPEにすることができます。

このメンバーは、ディスプレイには使用されません。

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmPaperSize

プリンターの場合は、印刷する用紙のサイズを指定します。 用紙の長さと幅を dmPaperLength メンバーと dmPaperWidth メンバーで指定する場合、このメンバーは 0 である必要があります。 それ以外の場合、 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 インチの画像には 17 x 22 インチの用紙が必要ですが、スケール値が 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 解像度の 1 インチあたりのドット数 (DPI) を表し、 y 解像度は dmYResolution で指定します。

このメンバーは、ディスプレイには使用されません。

DUMMYUNIONNAME.dmPosition

DUMMYUNIONNAME.DUMMYSTRUCTNAME2

DUMMYUNIONNAME.DUMMYSTRUCTNAME2.dmPosition

ディスプレイの場合は、ディスプレイの左上隅の x 座標と y 座標をデスクトップ座標で含む POINTL 構造体を指定します。 このメンバーは、複数のモニター環境でのモニターの相対位置を決定するために使用されます。

このメンバーはプリンターには使用されません。

DUMMYUNIONNAME.DUMMYSTRUCTNAME2.dmDisplayOrientation

このメンバーは、Windows XP 以降でのみ定義されます。

ディスプレイの場合は、画像を表示する向きを指定します。 dmFields メンバーでDM_DISPLAYORIENTATION ビットが設定されていない場合は、このメンバーを 0 に設定する必要があります。 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 ビットが設定されていない場合は、このメンバーを 0 に設定する必要があります。 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

ディスプレイの場合は、ディスプレイ デバイスの 1 インチあたりの論理ピクセル数を指定し、GDIINFO 構造体の ulLogPixels メンバーと等しくする必要があります。

このメンバーはプリンターには使用されません。

dmBitsPerPel

ディスプレイの場合は、ディスプレイ デバイスの色解像度をピクセルあたりのビット数で指定します。

このメンバーはプリンターには使用されません。

dmPelsWidth

ディスプレイの場合は、表示されるデバイスサーフェスの幅をピクセル単位で指定します。

このメンバーはプリンターには使用されません。

dmPelsHeight

ディスプレイの場合は、表示されるデバイスサーフェスの高さをピクセル単位で指定します。

このメンバーはプリンターには使用されません。

DUMMYUNIONNAME2

DUMMYUNIONNAME2.dmDisplayFlags

デバイスの表示モードを指定します。 このメンバーには、次の値の組み合わせを指定できます。

意味
DM_GRAYSCALE ディスプレイが非カラー デバイスであることを指定します。 このフラグが設定されていない場合は、色が想定されます。 このフラグは無効です。
DM_INTERLACED 表示モードがインターレースされることを指定します。 フラグが設定されていない場合は、非インターレースと見なされます。

ディスプレイ ドライバーはこのメンバーを使用します。たとえば、 ChangeDisplaySettings 関数では です。 プリンター ドライバーでは、このメンバーは使用されません。

DUMMYUNIONNAME2.dmNup

プリンターの場合、印刷システムが "N アップ" 印刷を処理するかどうかを指定します (複数の EMF 論理ページを 1 つの物理ページに再生します)。 このメンバーの値には、次のいずれかを指定できます。

意味
DMNUP_SYSTEM 印刷システムは、"N アップ" 印刷を処理します。
DMNUP_ONEUP 印刷システムでは、"N アップ" 印刷は処理されません。 アプリケーションは、"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 という 2 つの新しいメンバーが含まれています。 これらのメンバーについては、前の「メンバー」セクションで説明します。

また、Windows XP の場合、DEVMODEW 構造体のいくつかのメンバーは、この構造体内の異なる場所に移動されました。 dmScaledmCopiesdmDefaultSource、および dmPrintQuality メンバーが、dmOrientationdmPaperSizedmPaperLength、および dmPaperWidth メンバーを含む構造体メンバーに追加されました。

注意

wingdi.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして DEVMODE を定義します。 エンコードに依存しないエイリアスをエンコードニュートラルでないコードと組み合わせて使用すると、コンパイルまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

要件
Header wingdi.h (Wingdi.h を含む)

こちらもご覧ください

DOCUMENTPROPERTYHEADER

DrvConvertDevMode

DrvDeviceCapabilities

DrvGetModes