描述
ChangeDisplaySettingsEx功能将指定的显示设备的设置更改为指定的图形模式。
C++ 语法
LONG ChangeDisplaySettingsEx( __in LPCTSTR lpszDeviceName, __in LPDEVMODE lpDevMode, __in HWND hwnd, __in DWORD dwflags, __in LPVOID lParam ); |
PowerBASIC 语法
FUNCTION ChangeDisplaySettingsExA ( _ BYREF lpszDeviceName AS ASCIIZ, _ BYREF lpDevMode AS DEVMODEA, _ BYVAL hwnd AS DWORD, _ BYVAL dwflags AS DWORD, _ BYREF lParam AS ANY _ ) AS LONG |
Unicode版本:
FUNCTION ChangeDisplaySettingsExW ( _ BYREF lpszDeviceName AS WSTRINGZ, _ BYREF lpDevMode AS DEVMODEW, _ BYVAL hwnd AS DWORD, _ BYVAL dwflags AS DWORD, _ BYREF lParam AS ANY _ ) AS LONG |
参数
lpszDeviceName
[in]指向以空字符结尾的字符串的指针,指定其图形模式将更改的显示设备。EnumDisplayDevices返回的只显示设备名称是有效的。有关与这些显示设备相关联的名称的更多信息,请参阅EnumDisplayDevices.
lpszDeviceName参数可以为NULL。NULL值指定默认显示设备。默认设备可以通过调用EnumDisplayDevices并检查DISPLAY_DEVICE_PRIMARY_DEVICE标志来确定。
lpDevMode
[in]指向描述新图形模式的DEVMODE结构的指针。如果lpDevMode为NULL,则注册表中当前所有的值都将用于显示设置。在lpDevMode参数传递NULL,而对于dwFlags中参数传递0是在动态模式更改后返回默认模式的最简单方法。
DEVMODE的dmsiz到成员必须初始化为DEVMODE结构的大小(以字节为单位)。dmDriverExtradmDriverExtra成员必须初始化,以指示DEVMODE结构之后的专用驱动程序数据的字节数。此外,您可以使用DEVMODE结构中的任何或所有以下成员。
会员 |
含义 |
dmBitsPerPel |
每像素位数 |
dmPelsWidth |
像素宽度 |
dmPelsHeight |
像素高度 |
dmDisplayFlags |
模式标志 |
dmDisplayFrequency |
模式频率 |
dmPosition |
Windows 98 / Me,Windows 2000 / XP / Vista / Windows 7:设备位于多监视器配置中的位置 |
除了使用一个或多个前面的DEVMODE成员之外,还必须在dmFieldsno成员中设置以下一个或多个值来更改显示设置。
会员 |
含义 |
DM_BITSPERPEL |
使用dmBitsPerPel值。 |
DM_PELSWIDTH |
使用dmPelsWidth值。 |
DM_PELSHEIGHT |
使用dmPelsHeight值。 |
DM_DISPLAYFLAGS |
使用dmDisplayFlags值。 |
DM_DISPLAYFREQUENCY |
使用dmDisplayFrequency值。 |
DM_POSITION |
Windows 98 / Me,Windows 2000 / XP / Vista / Windows 7:使用dmPosition值。 |
hwnd
保留;必须为NULL。
dwflags
[in]指示如何更改图形模式。此参数可以是以下值之一。
值 |
含义 |
0 |
当前屏幕的图形模式将被动态更改。 |
CDS_FULLSCREEN |
这种模式本质上是暂时的。
Windows NT / 2000 / XP / Vista / Windows 7:如果您切换到另一台桌面,则不会重置此模式。 |
CDS_GLOBAL |
这些设置将被保存在全局设置区域,以便它们将影响机器上的所有用户。否则,仅修改用户的设置。此标志仅在使用CDS_UPDATEREGISTRY标志指定时有效。 |
CDS_NORESET |
设置将保存在注册表中,但不会生效。此标志仅在使用CDS_UPDATEREGISTRY标志指定时有效。 |
CDS_RESET |
即使请求的设置与当前设置相同,应该更改设置。 |
CDS_SET_PRIMARY |
该设备将成为主要设备。 |
CDS_TEST |
系统测试是否可以设置所请求的图形模式。 |
CDS_UPDATEREGISTRY |
当前屏幕的图形模式将被动态更改,图形模式将在注册表中更新。模式信息存储在USER配置文件中。 |
CDS_VIDEOPARAMETERS |
设置时,lParam的参数是指向VIDEOPARAMETERS结构的指针。 |
指定CDS_TEST允许应用程序确定哪些图形模式实际有效,而不会导致系统更改它们。
如果指定了CDS_UPDATEREGISTRY,并且可以动态更改图形模式,则信息将存储在注册表中,并返回DISP_CHANGE_SUCCESSFUL。如果不可能动态更改图形模式,信息将存储在注册表中,并返回DISP_CHANGE_RESTART。
Windows NT / 2000 / XP/ VISTA / Windows 7的:如果指定了CDS_UPDATEREGISTRY,并且信息无法存储在注册表中,则图形模式不会更改,并返回DISP_CHANGE_NOTUPDATED。
返回值
ChangeDisplaySettings函数返回以下值之一。
值 |
含义 |
DISP_CHANGE_SUCCESSFUL |
设置更改成功。 |
DISP_CHANGE_BADDUALVIEW |
Windows XP / Vista / Windows 7:设置更改不成功,因为系统具备DualView功能。 |
DISP_CHANGE_BADFLAGS |
传入一组无效的标志。 |
DISP_CHANGE_BADMODE |
不支持图形模式。 |
DISP_CHANGE_BADPARAM |
传入无效参数。这可以包括无效标志或标志的组合。 |
DISP_CHANGE_FAILED |
显示驱动程序在指定的图形模式下失败。 |
DISP_CHANGE_NOTUPDATED |
Windows NT / 2000 / XP / Vista / Windows 7:无法将设置写入注册表。 |
DISP_CHANGE_RESTART |
必须重新启动计算机才能使图形模式工作。 |
备注
为了确保传递给ChangeDisplaySettingsEx的DEVMODE结构有效,仅包含显示驱动程序支持的值,请使用EnumDisplaySettings函数返回的DEVMODE.
将显示监视器以编程方式添加到多监视器系统时,请将DEVMODE.dmFields设置为DM_POSITION,并为要添加的显示器指定与现有显示区域的至少一个像素相邻的位置(DEVMODE.dmPosition)监控。要分离显示器,请将DEVMODE.dmFields设置为DM_POSITION,但将DEVMODE.dmPelsWidth和DEVMODE.dmPelsHeight设置为零。
当显示模式动态更改时,WM_DISPLAYCHANGE消息将发送到具有以下消息参数的所有正在运行的应用程序。
参数 |
含义 |
wParam中 |
每像素新位 |
LOWORD(lParam) |
新像素宽度 |
HIWORD(lParam) |
新像素高度 |
要同时更改多个显示的设置,请先单独调用每个设备的ChangeDisplaySettingsEx以更新注册表,而不应用更改。然后再使用NULL设备调用ChangeDisplaySettingsEx来应用更改。例如,要更改两个显示的设置,请执行以下操作:
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:Microsoft Layer for Unicode支持ChangeDisplaySettingsW.
引用文件 #INCLUDE Once
WinUser.inc(包括Windows.inc)