函数功能:该函数把显示设备在lpszDeviceName参数中定义的设置,改变为在lpDevMode参数中定义的图形模式。

    函数原型:LONG ChangeDisplaySettingsEx(LPCSTR lpszDeviceName, LPDEVMODE lpDevMode, HWND hwnd, DWORD dwflags LPVOID lParam);

    参数:

    lpszDeviceName:指向一个以null结尾的字符串的指针,该字符串指定了一个显示设备,该函数从该显示设备中得到它的图形模式的信息。

    查看EnumDisplayDevice函数,可得与这些显示设备有关的名字的更详细的信息,lpszDeviceName参数可以为NULL(空),NULL值定义了缺省的显示设备。

    lpDevMode:指向DEVMOD结构的指针,该结构描述了要经向的图形模式dmSize元素,必须以字节为单位,初始化为DEVMODE结构的尺寸,可以使用DEVMODE结构的如下元素:

    dmBitsPerpel每像素字节数,dmPelsWidth像素宽度,dmPelsHeight像素高度,

    dmDisplayFlags模式标志,dmDisplayFrequency模式频率,

    dmPosition:Windows98和WindowsNT5.0以后版本,在多显示配置下的设备位置。

    为了设置前面的DEVMODE元素,必须在dmFields元素中设置适当的标志,这些标志表明DEVMODE结构的哪些元素是用来改变显示设置,如果在dmFields中没有设置适当的位,则显示设备不会被改变。

    设备如下的一个或多个标志:

    DM_BITSPERPEL:使用dmBitsPerPel值,DM_PELSWIDTH:使用dmPelsWidth值。

    DM_PELSHEIGHT:使用dmPelsHeight值,DM_DISPLAYFLAGS:使用dmDisplayFlags值。

    DM_DISPLAYFREQUENCY:使用dmDisplayFrequency值。

    DM_POSITION:Windows98, Windows NT 5.0和以后版本,使用dmPosition值。

    如果lpDevMode为NULL,使用注册表中的所有当前值来进行显示设置,在一个动态模式改变之后恢复缺省模式的最简单的办法是把lpDevMode设为NULL和把dwFlags参数置为0。

    hwnd:必须为NULL。

    dwflags:表明图形模式如何改变,dwflags可取如下值之一:

    0:当前屏幕的图形模式将动态地改变。

    CDS_UPDATEREGISTRY:当前屏幕的图形模式将动态地改变并且在注册表中图形模式将会更新,模式信息存储在USER描述文件中。

    CDS_TEST:如果请求的图形模要被设置,则系统进行测试,CDS_FULLSCREEN从本质上讲这种模式是暂时的。(对于Windows NT:如果改变到另一个桌面,或从另一个桌面改变,那么该模式将不被重置)。

    CDS_GLOBAL:这些设置将保存在全局设置区内,因此它们对所有用户都有作用,该标志只有与CDS_UPDATEREGISTRY标志一起设置时才有效。

    CDS_SET_PRIMARY:该设备将成为原始设备。

    CDS_RESET:即使请求设置与当前设置相同,也会改变设置。

    CDS_SETRECT:在WM_DISPLAYCHANGE消息中指定的发送到所有应用程序的lParam消息参数,被当作RECT结构的指针,该结构在一个多屏幕环境中定义了显示设备的位置。如果iParam参数为NULL,意味着显示设备将从多屏幕环境中分离。

    CDS_NOREST:设置保存在注册表中,但不起作用,该标志只有和CDS_UPDATEREGISTRY标志一起指定时才有效。

    指定CDS_TEST能让一个应用程序确定哪一种图形模式真正有效而不导致系统改变到那种图形模式如果指定了CDS_UPDATEREGISTRY并且可能动态改变图形模式,则这些信息存储在注册表中并返回DISP_CHANGE_SUCCESSFUL,如果不能动态改变图形模式,则信息存储在注册表中并返回DISP_CHANGE_RESTART。

    Windows:如果指定CDS_UPDATEREGISTRY,并且信息不能保存在注册表中,那么图形模式不会改变,并返回DISP_CHANGE_NOTUPDATED。

    lParam:必须为空。

    返回值:ChabngeDisplaySettingEx函数返回如下一值:

    DISP_CHANGE_SUCCESSRJL:设置改变成功。

    DISP_CHANGE_RESTART:为了图形模式正确地运行,计算机必须重新启动。

    DISP_CHANGE_BADFLAGS:传送了一个无效的标志集。

    DISP_CHANGE_NOTUPDATED:Windows NT不能把设置写入注册表。

    DISP_CHANGE_BADPARAM:传送了一个无效参数,包括一个无效标志或几个无效标志的组合。

    DISP_CHANGE_FAILED:指定图形模式显示驱动失效。

    DISP_CHANGE_BADMODE:不支持该图形模式。

    注释:为了保证传送给ChangeDisplaySettingEx函数的DEVMODE结构是有效的,并且仅包含显示驱动支持的值,请使用EnumDisplaySetting函数返回的DEVMODE结构。

    当显示模式动态改变时,WM_DISPLAYCHAGE消息带着如下的消息参数传送给所有正在运行的应用程序:

    wParam像素的新位数,LOWORD(lParam)新像素宽度;HIWORD(iParam)新像素高度。

    速查:Windows NT:5.0及以上版本;Windows:98及以上版本;Windows CE:不支持;头文件:winuser.h;库文件:user32.lib;Unicode:在Windows NT上实现为Unicode和ANSI两种版本。