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 メンバーを提供しない場合は、このメンバーを 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 XP では、新しい 構造体 メンバーが追加されました。 この 構造体 メンバーには、既存の DEVMODEW 構造体メンバー dmPosition と、 dmDisplayOrientation と dmDisplayFixedOutput という 2 つの新しいメンバーが含まれています。 これらのメンバーについては、前の「メンバー」セクションで説明します。
また、Windows XP の場合、DEVMODEW 構造体のいくつかのメンバーがこの構造体内の別の場所に移動されました。 dmScale、dmCopies、dmDefaultSource、および dmPrintQuality メンバーが、dmOrientation、dmPaperSize、dmPaperLength、および dmPaperWidth メンバーを含む構造体メンバーに追加されました。
注
wingdi.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして DEVMODE を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。
要求事項
要件 | 価値 |
---|---|
ヘッダー | wingdi.h (Wingdi.h を含む) |