描述
ChangeDisplaySettings功能将默认显示设备的设置更改为指定的图形模式。
要更改指定的显示设备的设置,请使用ChangeDisplaySettingsEx功能。
C++ 语法
LONG ChangeDisplaySettings( __in LPDEVMODE lpDevMode, __in DWORD dwflags ); |
PowerBASIC 语法
FUNCTION ChangeDisplaySettingsA ( _ BYREF lpDevMode DEVMODEA, _ BYVAL dwflags AS DWORD _ ) AS LONG |
Unicode版本:
FUNCTION ChangeDisplaySettingsW ( _ BYREF lpDevMode DEVMODEW, _ BYVAL dwflags AS DWORD _ ) AS LONG |
参数
lpDevMode
[in]指向描述新图形模式的DEVMODE结构的指针。如果lpDevMode为NULL,则注册表中当前所有的值都将用于显示设置。对于lpDevMode参数传递NULL,对于dwFlags中参数传递0是在动态模式更改后返回默认模式的最简单方法。
dmsiz到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值。 |
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_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 |
必须重新启动计算机才能使图形模式工作。 |
备注
为了确保传递给ChangeDisplaySettings的DEVMODE结构有效,仅包含显示驱动程序支持的值,请使用EnumDisplaySettings函数返回的DEVMODE.
当显示模式动态更改时,WM_DISPLAYCHANGE消息将发送到具有以下消息参数的所有正在运行的应用程序。
参数 |
含义 |
wParam中 |
每像素新位 |
LOWORD(lParam) |
新像素宽度 |
HIWORD(lParam) |
新像素高度 |
Windows 95/98 / Me:如果调用线程有任何窗口,ChangeDisplaySettings立即向他们发送WM_DISPLAYCHANGE消息(对于所有其他线程中的Windows,当线程可以接收非队列消息时,发送消息)。这可能会导致shell很快收到消息,并且可能会压缩图标。为了避免这个问题,请ChangeDisplaySettings通过调用没有Windows的线程来执行分辨率切换,例如新线程。
Windows 95/98 / Me:Microsoft Layer for Unicode支持ChangeDisplaySettingsW.
引用文件 #INCLUDE Once
WinUser.inc(包括Windows.inc)