ChangeDisplaySettingsEx

 

Description

 

The ChangeDisplaySettingsEx function changes the settings of the specified display device to the specified graphics mode.

 

C++ Syntax

 

LONG ChangeDisplaySettingsEx(

__in LPCTSTR lpszDeviceName,

__in LPDEVMODE lpDevMode,

__in HWND hwnd,

__in DWORD dwflags,

__in LPVOID lParam

);

 

PowerBASIC Syntax

 

FUNCTION ChangeDisplaySettingsEx ( _

BYREF lpszDeviceName AS ASCIIZ, _

BYREF lpDevMode AS DEVMODE, _

BYVAL hwnd AS DWORD, _

BYVAL dwflags AS DWORD, _

BYREF lParam AS ANY _

) AS LONG

 

Unicode version:

 

FUNCTION ChangeDisplaySettingsExW ( _

BYVAL lpszDeviceName AS DWORD, _

BYREF lpDevMode AS DEVMODEW, _

BYVAL hwnd AS DWORD, _

BYVAL dwflags AS DWORD, _

BYREF lParam AS ANY _

) AS LONG

 

Parameters

 

lpszDeviceName

 

[in] Pointer to a null-terminated string that specifies the display device whose graphics mode will change. Only display device names as returned by EnumDisplayDevices are valid. See EnumDisplayDevices for further information on the names associated with these display devices.

 

The lpszDeviceName parameter can be NULL. A NULL value specifies the default display device. The default device can be determined by calling EnumDisplayDevices and checking for the DISPLAY_DEVICE_PRIMARY_DEVICE flag.

 

lpDevMode

 

[in] Pointer to a DEVMODE structure that describes the new graphics mode. If lpDevMode is NULL, all the values currently in the registry will be used for the display setting. Passing NULL for the lpDevMode parameter and 0 for the dwFlags parameter is the easiest way to return to the default mode after a dynamic mode change.

 

The dmSize member of DEVMODE must be initialized to the size, in bytes, of the DEVMODE structure. The dmDriverExtra member of DEVMODE must be initialized to indicate the number of bytes of private driver data following the DEVMODE structure. In addition, you can use any or all of the following members of the DEVMODE structure.

 

Member

Meaning

dmBitsPerPel

Bits per pixel

dmPelsWidth

Pixel width

dmPelsHeight

Pixel height

dmDisplayFlags

Mode flags

dmDisplayFrequency

Mode frequency

dmPosition

Windows 98/Me, Windows 2000/XP: Position of the device in a multimonitor configuration

 

In addition to using one or more of the preceding DEVMODE members, you must also set one or more of the following values in the dmFields member to change the display setting.

 

Member

Meaning

DM_BITSPERPEL

Use the dmBitsPerPel value.

DM_PELSWIDTH

Use the dmPelsWidth value.

DM_PELSHEIGHT

Use the dmPelsHeight value.

DM_DISPLAYFLAGS

Use the dmDisplayFlags value.

DM_DISPLAYFREQUENCY

Use the dmDisplayFrequency value.

DM_POSITION

Windows 98/Me, Windows 2000/XP: Use the dmPosition value.

 

hwnd

 

Reserved; must be NULL.

 

dwflags

 

[in] Indicates how the graphics mode should be changed. This parameter can be one of the following values.

 

Value

Meaning

0

The graphics mode for the current screen will be changed dynamically.

CDS_FULLSCREEN

The mode is temporary in nature.

 

Windows NT/2000/XP: If you change to and from another desktop, this mode will not be reset.

CDS_GLOBAL

The settings will be saved in the global settings area so that they will affect all users on the machine. Otherwise, only the settings for the user are modified. This flag is only valid when specified with the CDS_UPDATEREGISTRY flag.

CDS_NORESET

The settings will be saved in the registry, but will not take effect. This flag is only valid when specified with the CDS_UPDATEREGISTRY flag.

CDS_RESET

The settings should be changed, even if the requested settings are the same as the current settings.

CDS_SET_PRIMARY

This device will become the primary device.

CDS_TEST

The system tests if the requested graphics mode could be set.

CDS_UPDATEREGISTRY

The graphics mode for the current screen will be changed dynamically and the graphics mode will be updated in the registry. The mode information is stored in the USER profile.

CDS_VIDEOPARAMETERS

When set, the lParam parameter is a pointer to a VIDEOPARAMETERS structure.

 

Specifying CDS_TEST allows an application to determine which graphics modes are actually valid, without causing the system to change to them.

 

If CDS_UPDATEREGISTRY is specified and it is possible to change the graphics mode dynamically, the information is stored in the registry and DISP_CHANGE_SUCCESSFUL is returned. If it is not possible to change the graphics mode dynamically, the information is stored in the registry and DISP_CHANGE_RESTART is returned.

 

Windows NT/2000/XP: If CDS_UPDATEREGISTRY is specified and the information could not be stored in the registry, the graphics mode is not changed and DISP_CHANGE_NOTUPDATED is returned.

 

Return Value

 

The ChangeDisplaySettings function returns one of the following values.

 

Value

Meaning

DISP_CHANGE_SUCCESSFUL

The settings change was successful.

DISP_CHANGE_BADDUALVIEW

Windows XP: The settings change was unsuccessful because system is DualView capable.

DISP_CHANGE_BADFLAGS

An invalid set of flags was passed in.

DISP_CHANGE_BADMODE

The graphics mode is not supported.

DISP_CHANGE_BADPARAM

An invalid parameter was passed in. This can include an invalid flag or combination of flags.

DISP_CHANGE_FAILED

The display driver failed the specified graphics mode.

DISP_CHANGE_NOTUPDATED

Windows NT/2000/XP: Unable to write settings to the registry.

DISP_CHANGE_RESTART

The computer must be restarted in order for the graphics mode to work.

 

Remarks

 

To ensure that the DEVMODE structure passed to ChangeDisplaySettingsEx is valid and contains only values supported by the display driver, use the DEVMODE returned by the EnumDisplaySettings function.

 

When adding a display monitor to a multiple-monitor system programmatically, set DEVMODE.dmFields to DM_POSITION and specify a position (in DEVMODE.dmPosition) for the monitor you are adding that is adjacent to at least one pixel of the display area of an existing monitor. To detach the monitor, set DEVMODE.dmFields to DM_POSITION but set DEVMODE.dmPelsWidth and DEVMODE.dmPelsHeight to zero.

 

When the display mode is changed dynamically, the WM_DISPLAYCHANGE message is sent to all running applications with the following message parameters.

 

Parameters

Meaning

wParam

New bits per pixel

LOWORD(lParam)

New pixel width

HIWORD(lParam)

New pixel height

 

To change the settings for more than one display at the same time, first call ChangeDisplaySettingsEx for each device individually to update the registry without applying the changes. Then call ChangeDisplaySettingsEx once more, with a NULL device, to apply the changes. For example, to change the settings for two displays, do the following:

 

ChangeDisplaySettingsEx (lpszDeviceName1, lpDevMode1, %NULL, (%CDS_UPDATEREGISTRY OR %CDS_NORESET), BYVAL %NULL)

ChangeDisplaySettingsEx (lpszDeviceName2, lpDevMode2, %NULL, (%CDS_UPDATEREGISTRY OR %CDS_NORESET), BYVAL %NULL)

ChangeDisplaySettingsEx (%NULL, BYVAL %NULL, %NULL, 0, BYVAL %NULL)

 

Windows 95/98/Me: ChangeDisplaySettingsW is supported by the Microsoft Layer for Unicode.

 

Valid XHTML 1.0 Transitional