ChangeDisplaySettingsExA 함수(winuser.h)
ChangeDisplaySettingsEx 함수는 지정된 디스플레이 디바이스의 설정을 지정된 그래픽 모드로 변경합니다.
구문
LONG ChangeDisplaySettingsExA(
[in] LPCSTR lpszDeviceName,
[in] DEVMODEA *lpDevMode,
HWND hwnd,
[in] DWORD dwflags,
[in] LPVOID lParam
);
매개 변수
[in] lpszDeviceName
그래픽 모드가 변경될 디스플레이 디바이스를 지정하는 null로 끝나는 문자열에 대한 포인터입니다. EnumDisplayDevices에서 반환된 디바이스 이름만 표시할 수 있습니다. 이러한 디스플레이 디바이스와 연결된 이름에 대한 자세한 내용은 EnumDisplayDevices 를 참조하세요.
lpszDeviceName 매개 변수는 NULL일 수 있습니다. NULL 값은 기본 표시 디바이스를 지정합니다. 기본 디바이스는 EnumDisplayDevices 를 호출하고 DISPLAY_DEVICE_PRIMARY_DEVICE 플래그를 확인하여 확인할 수 있습니다.
[in] lpDevMode
새 그래픽 모드를 설명하는 DEVMODE 구조체에 대한 포인터입니다. lpDevMode가 NULL이면 현재 레지스트리에 있는 모든 값이 표시 설정에 사용됩니다. lpDevMode 매개 변수에 대해 NULL을 전달하고 dwFlags 매개 변수에 대해 0을 전달하는 것이 동적 모드 변경 후 기본 모드로 돌아가는 가장 쉬운 방법입니다.
dmSize 멤버는 DEVMODE 구조체의 크기(바이트)로 초기화되어야 합니다. dmDriverExtra 멤버는 DEVMODE 구조에 따른 프라이빗 드라이버 데이터의 바이트 수를 나타내기 위해 초기화되어야 합니다. 또한 DEVMODE 구조체의 다음 멤버를 사용할 수 있습니다.
멤버 | 의미 |
---|---|
dmBitsPerPel | 픽셀당 비트 수 |
dmPelsWidth | 픽셀 너비 |
dmPelsHeight | 픽셀 높이 |
dmDisplayFlags | 모드 플래그 |
dmDisplayFrequency | 모드 빈도 |
dmPosition | 다중 모니터 구성에서 디바이스의 위치입니다. |
앞의 DEVMODE 멤버 중 하나 이상을 사용하는 것 외에도 dmFields 멤버에서 다음 값 중 하나 이상을 설정하여 표시 설정을 변경해야 합니다.
값 | 의미 |
---|---|
DM_BITSPERPEL | dmBitsPerPel 값을 사용합니다. |
DM_PELSWIDTH | dmPelsWidth 값을 사용합니다. |
DM_PELSHEIGHT | dmPelsHeight 값을 사용합니다. |
DM_DISPLAYFLAGS | dmDisplayFlags 값을 사용합니다. |
DM_DISPLAYFREQUENCY | dmDisplayFrequency 값을 사용합니다. |
DM_POSITION | dmPosition 값을 사용합니다. |
hwnd
예약; 은 NULL이어야 합니다.
[in] dwflags
그래픽 모드를 변경하는 방법을 나타냅니다. 이 매개 변수는 다음 값 중 하나일 수 있습니다.
값 | 의미 |
---|---|
|
현재 화면의 그래픽 모드가 동적으로 변경됩니다. |
|
모드는 본질적으로 일시적입니다.
다른 데스크톱으로 변경하면 이 모드가 다시 설정되지 않습니다. |
|
설정은 컴퓨터의 모든 사용자에게 영향을 주도록 전역 설정 영역에 저장됩니다. 그렇지 않으면 사용자에 대한 설정만 수정됩니다. 이 플래그는 CDS_UPDATEREGISTRY 플래그로 지정된 경우에만 유효합니다. |
|
설정은 레지스트리에 저장되지만 적용되지 않습니다. 이 플래그는 CDS_UPDATEREGISTRY 플래그로 지정된 경우에만 유효합니다. |
|
요청된 설정이 현재 설정과 동일한 경우에도 설정을 변경해야 합니다. |
|
이 디바이스는 기본 디바이스가 됩니다. |
|
시스템은 요청된 그래픽 모드를 설정할 수 있는지 테스트합니다. |
|
현재 화면의 그래픽 모드가 동적으로 변경되고 레지스트리에서 그래픽 모드가 업데이트됩니다. 모드 정보는 USER 프로필에 저장됩니다. |
|
설정하면 lParam 매개 변수는 VIDEOPARAMETERS 구조체에 대한 포인터입니다. |
|
안전하지 않은 그래픽 모드로 설정을 변경할 수 있습니다. |
|
안전하지 않은 그래픽 모드에 대한 설정 변경을 사용하지 않도록 설정합니다. |
CDS_TEST 지정하면 시스템에서 그래픽 모드를 변경하지 않고도 실제로 유효한 그래픽 모드를 확인할 수 있습니다.
CDS_UPDATEREGISTRY 지정하고 그래픽 모드를 동적으로 변경할 수 있는 경우 정보가 레지스트리에 저장되고 DISP_CHANGE_SUCCESSFUL 반환됩니다. 그래픽 모드를 동적으로 변경할 수 없는 경우 정보가 레지스트리에 저장되고 DISP_CHANGE_RESTART 반환됩니다.
CDS_UPDATEREGISTRY 지정하고 정보를 레지스트리에 저장할 수 없는 경우 그래픽 모드가 변경되지 않고 DISP_CHANGE_NOTUPDATED 반환됩니다.
[in] lParam
dwFlags가 CDS_VIDEOPARAMETERS 경우 lParam은 VIDEOPARAMETERS 구조체에 대한 포인터입니다. 그렇지 않으면 lParam 이 NULL이어야 합니다.
반환 값
ChangeDisplaySettingsEx 함수는 다음 값 중 하나를 반환합니다.
반환 코드 | 설명 |
---|---|
|
설정 변경에 성공했습니다. |
|
시스템이 DualView를 사용할 수 있으므로 설정 변경에 실패했습니다. |
|
잘못된 플래그 집합이 전달되었습니다. |
|
그래픽 모드는 지원되지 않습니다. |
|
잘못된 매개 변수가 전달되었습니다. 여기에는 잘못된 플래그 또는 플래그 조합이 포함될 수 있습니다. |
|
디스플레이 드라이버가 지정된 그래픽 모드에 실패했습니다. |
|
레지스트리에 설정을 쓸 수 없습니다. |
|
그래픽 모드가 작동하려면 컴퓨터를 다시 시작해야 합니다. |
설명
ChangeDisplaySettingsEx에 전달된 DEVMODE 구조체가 유효하고 디스플레이 드라이버에서 지원하는 값만 포함하도록 하려면 EnumDisplaySettings 함수에서 반환된 DEVMODE를 사용합니다.
프로그래밍 방식으로 다중 모니터 시스템에 디스플레이 모니터를 추가할 때 DEVMODE.dmFields 를 DM_POSITION 설정하고 기존 모니터의 디스플레이 영역 중 하나 이상의 픽셀에 인접한 추가 중인 모니터의 위치( DEVMODE.dmPosition)를 지정합니다. 모니터를 분리하려면 DEVMODE.dmFields 를 DM_POSITION 설정하지만 DEVMODE.dmPelsWidth 및 DEVMODE.dmPelsHeight 를 0으로 설정합니다. 자세한 내용은 여러 디스플레이 모니터를 참조하세요.
표시 모드가 동적으로 변경되면 다음 메시지 매개 변수를 사용하여 실행 중인 모든 애플리케이션에 WM_DISPLAYCHANGE 메시지가 전송됩니다.
매개 변수 | 의미 |
---|---|
wParam | 픽셀당 새 비트 |
LOWORD(lParam) | 새 픽셀 너비 |
HIWORD(lParam) | 새 픽셀 높이 |
둘 이상의 디스플레이에 대한 설정을 동시에 변경하려면 먼저 각 디바이스에 대해 ChangeDisplaySettingsEx를 개별적으로 호출하여 변경 내용을 적용하지 않고 레지스트리를 업데이트합니다. 그런 다음 NULL 디바이스를 사용하여 ChangeDisplaySettingsEx를 다시 한 번 호출하여 변경 내용을 적용합니다. 예를 들어 두 디스플레이에 대한 설정을 변경하려면 다음을 수행합니다.
ChangeDisplaySettingsEx (lpszDeviceName1, lpDevMode1, NULL, (CDS_UPDATEREGISTRY | CDS_NORESET), NULL);
ChangeDisplaySettingsEx (lpszDeviceName2, lpDevMode2, NULL, (CDS_UPDATEREGISTRY | CDS_NORESET), NULL);
ChangeDisplaySettingsEx (NULL, NULL, NULL, 0, NULL);
DPI 가상화
이 API는 DPI 가상화에 참여하지 않습니다. 지정된 입력은 항상 물리적 픽셀을 기준으로 하며 호출 컨텍스트와 관련이 없습니다.참고
winuser.h 헤더는 CHANGEDisplaySettingsEx를 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입에 대한 규칙을 참조하세요.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000 Professional[데스크톱 앱만] |
지원되는 최소 서버 | Windows 2000 Server[데스크톱 앱만] |
대상 플랫폼 | Windows |
헤더 | winuser.h(Windows.h 포함) |
라이브러리 | User32.lib |
DLL | User32.dll |
API 세트 | ext-ms-win-ntuser-sysparams-ext-l1-1-1(Windows 10 버전 10.0.14393에 도입됨) |