勇芳软件工作室.汉化:  Device Contexts > Device Contexts Functions >

ChangeDisplaySettingsEx

Previous pageReturn to chapter overviewNext page

描述

 

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是在动态模式更改后返回默认模式的最简单方法。

 

DEVMODEdmsiz到成员必须初始化为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

必须重新启动计算机才能使图形模式工作。

 

备注

 

为了确保传递给ChangeDisplaySettingsExDEVMODE结构有效,仅包含显示驱动程序支持的值,请使用EnumDisplaySettings函数返回的DEVMODE.

 

将显示监视器以编程方式添加到多监视器系统时,请将DEVMODE.dmFields设置为DM_POSITION,并为要添加的显示器指定与现有显示区域的至少一个像素相邻的位置(DEVMODE.dmPosition)监控。要分离显示器,请将DEVMODE.dmFields设置为DM_POSITION,但将DEVMODE.dmPelsWidthDEVMODE.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)