다음을 통해 공유


DEVMODEW 구조체(wingdi.h)

DEVMODEW 구조체는 유니코드(와이드) 문자 집합에서 디스플레이 및 인쇄 디바이스의 특성을 지정하는 데 사용됩니다.

구문

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

프린터의 경우 인쇄할 용지의 크기를 지정합니다. 용지의 길이와 너비가 dmPaperLengthdmPaperWidth 멤버로 지정된 경우 이 멤버는 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인치 이미지는 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

디스플레이의 경우 데스크톱 좌표에서 디스플레이 왼쪽 위 모서리의 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

프린터의 경우 DPI에서 프린터의 y 해상도를 지정합니다. 이 멤버를 사용하는 경우 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 구조체의 유니코드 버전입니다(Microsoft Windows SDK 설명서에 설명되어 있습니다). 애플리케이션은 ANSI 또는 유니코드 버전의 구조를 사용할 수 있지만 드라이버는 유니코드 버전을 사용해야 합니다.

프린터 드라이버의 경우 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에서 새 구조체 멤버가 추가되었습니다. 이 구조체 멤버에는 dmDisplayOrientation 및 dmDisplayFixedOutput라는 두 개의 새 멤버와 함께 기존 DEVMODEW 구조체 멤버인 dmPosition이 포함됩니다. 이러한 멤버는 이전 멤버 섹션에서 설명합니다.

또한 Windows XP의 경우 DEVMODEW 구조체의 여러 멤버가 이 구조체의 다른 위치로 이동되었습니다. dmScale, dmCopies, dmDefaultSourcedmPrintQuality 멤버가 dmOrientation, dmPaperSize, dmPaperLengthdmPaperWidth 멤버를 포함하는 구조체 멤버에 추가되었습니다.

참고

wingdi.h 헤더는 DEVMODE를 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입에 대한 규칙을 참조하세요.

요구 사항

요구 사항
헤더 wingdi.h(Wingdi.h 포함)

추가 정보

DOCUMENTPROPERTYHEADER

DrvConvertDevMode

DrvDeviceCapabilities

DrvGetModes