1.BOOL GetDCOrgEx(HDC hdc, LPPOINT lpPoint);
函数功能:该函数得到设备上下文环境的最终转换原点,最终转换原点指定了一个位移。系统使用该位移把设备转换成客户坐标。
参数:
hdc:指定设备上下文环境,该设备上下文环境的最终转换原点将要被检索。
lpPoint:指向POINT结构的指针,该函数将把它置为最终转换原点,以设备坐标的形式。
返回值:如果成功,返回非零值,如果失败,返回零。
Windows NT:若想获得更多错误信息,请调用GetLastError函数。
注释:最终转换原点与屏幕的物理原点有关。
2. LONG ChangeDisplaySettings (LPDEVMODE lpDevMode, DWORD dwflags);
函数功能:该函数把缺省显示设备的设置改变为由lpDevMode设定的图形模式,要改变一个特定显示设备的设置,请使用ChangeDisplaySettingsEx函数。
参数:
lpDevMode:指向一个描述转变图表的DEVMODE的指针。DEVMODE的dmSize参数必须依DEVMODE结构的大小、字节进行初始化,dmDriveExtra参数必须初始化来显示DEVMODE随后的驱动数据的字节数,另外还可以选用以下参数:
dmBitsPerPel每个像素的位数,dmPelsWidth像素宽度,dmPelsHeight像度高度,dmDisplayFlage模式标志。
dmDisplayFrequency模式频率。
dmposition在多显示配置中设备的位置(适用于Windows 98、Windows NT 5.0及以后版本)。
除了设置好DEVMOD结构中诸多元素的值之外,还必须要正确地设置dmFields元素中的标志。这些标志表明了DEVMODE结构中哪个元素在改变显示设置时使用了。如果在dmFields中没有设置正确的位,那么显示设置将不会发生变化。请设置好以下的标志:
DM_BITSPERPEL使用dmBitsPerPel的值,DM_PELSWIDTH使用dmPelsWidth的值,
DM_PELSHEIGHT使用dmPelsHeight的值,DM_DISPLAYFLAGS使用dmDisplayFlags的值,
DM_DISPLAYFREQUENCY使用dmDisplayFrequency的值。
DM_POSITION使用fdmPosition的值(适用于Windows98、WindowsNT5.0)。
如果lpDevMode为空。那么显示设置就使用注册表中的所有当前值。在显示模式动态地调整之后要想再回到缺省的模式,最简单的办法就是把lpDevMode参数置为空,使dwFlags参数置为0。
dwflags:表明了图形模式如何改变,它可能是如下的几种形式中的一种:
0:表明当前屏幕的图形模式要动态地改变。
CDS_UPDATEREGISTRY:表明当前屏幕的图形模式会动态地变化,并且该图形模式会更新注册表。该模式信息存贮在用户档案中。
CDS_TEST:系统检测是否要设置被请求的图形模式。
CDS_FULLSCREEN:从本质上讲该模式是暂时的。
CDS_GLOBAL:该设置保存在全局设置区域内, 因此它们会影响所有的用户。该标志仅在与标志一起使用时才有效。CDS_SET_PRIMARY:该设备成为首要设备。
CDS_RESET:设置要改变,即使请求的设置与当前设置一样。CDS_NORESET:设置保存在注册表中,但是它不起作用,该标志只有与CDS_UPDATEREGISTRY标志一起使用时才有效。
指定CDS_TEST允许一个应用确定哪个图形模式真正的有效。但并不会使系统变为那个有效的图形模式。
如果CDS_UPDATEREGISTRY被指定并且它可能会动态地改变图形模式。则注册表中保存该信息并且返回DISP_CHANGE_SUCCESSFUL如果不可能使用图形模式动态地改变,则注册表中保存该信息并且返回DISP_CHANGE_RESTART。
Windows NT:如果指定了CDS_UPDATEREGISTRY并且在注册表中不能保存该信息,则图形模式不会改变,并且返回DISP_CHANGE_NOTUPDATERD。
返回值:ChangeDisplaySettings函数的返回值如下:
DISP_CHANGE_SUCCESSFUL:设备改变成功。
DISP_CHANGE_RESTART:为使图形模式生效计算机必须重新启动。
DISP_CHANGE_BADFLAGS:标志的无效设置被传送。
DISP_CHANGE_NOTUPDATED:在WindowsNT中不能把设置写入注册表。
DISP_CHANGE_BADPARA:一个无效的参数被传递。它可以包括一个无效的标志或标志的组合。
DISP_CHANGE_FAILED:指定图形模式的显示驱动失效。
DISP_CHANGE_ADMODE:不支持图形模式。
注释:为了保证传递给ChangeDisplaySetting的DEVMODE结构是有效的,并且仅包含显示驱动支持的值,可以使用由EnumDisplaySettings函数返回的DEVMODE。
当显示模式被动态地改变时,WM_DISPLAYCHANGE消息带着如下的消息参数传递给所有正在运行的应用:
wParam每像素点的新位数,LOWORD(lParam)新像素宽度,HIWORD(lParam)新像素高度。
下面举一具体的例子来说明在VC中如何修改显示器的分辨率和色彩。假设我们想将当前显示器的分辨率设为800X600,并使用24位色(色彩为224种)。
步骤1、新建一MFC AppWizard项目,本文为节约篇幅起见,在向导的第一步中选择基于对话框(Dialog Baseed)的程序。在向导的其余步骤中全部使用默认值。 步骤2、在对话框中新添加一按钮,标题设为“测试”。 步骤3、双击“测试”按钮,系统提示新建一函数OnButton1对应于该按钮的CLICK事件。OnButton1函数的具体代码如下: void CChange_fenbianDlg::OnButton1() { DEVMODE lpDevMode; lpDevMode.dmBitsPerPel=24; lpDevMode.dmPelsWidth=800; lpDevMode.dmPelsHeight=600; lpDevMode.dmSize=sizeof(lpDevMode); lpDevMode.dmFields =DM_PELSWIDTH|DM_PELSHEIGHT|DM_BITSPERPEL; LONG result; result=ChangeDisplaySettings(&lpDevMode,0); if (result==DISP_CHANGE_SUCCESSFUL) { AfxMessageBox("修改成功!"); ChangeDisplaySettings(&lpDevMode,CDS_UPDATEREGISTRY); //使用CDS_UPDATEREGISTRY表示次修改是持久的, //并在注册表中写入了相关的数据 } else { AfxMessageBox("修改失败,恢复原有设置!"); ChangeDisplaySettings(NULL,0); } } 说明:上述函数中对ChangeDisplaySettings的返回值result没有作过多的分析,在实际操作中出于程序稳健的角度出发,可以对ChangeDisplaySettings的返回值作出更加详细的判断,以找出修改不成功的原因 3.LONG ChangeDisplaySettingsEx(LPCSTR lpszDeviceName, LPDEVMODE lpDevMode, HWND hwnd, DWORD dwflags LPVOID lParam);
函数功能:该函数把显示设备在lpszDeviceName参数中定义的设置,改变为在lpDevMode参数中定义的图形模式。
参数:
lpszDeviceName:指向一个以null结尾的字符串的指针,该字符串指定了一个显示设备,该函数从该显示设备中得到它的图形模式的信息。
查看EnumDisplayDevice函数,可得与这些显示设备有关的名字的更详细的信息,lpszDeviceName参数可以为NULL(空),NULL值定义了缺省的显示设备。
旋转屏幕90度ChangeDisplaySettingsEx实例——WinCE
4.BOOL EnumDisplayDevices(PVOID Unused, DWORD iDevNum, PDISPLAY_DEVICE lpDisplayDevice, DWORD dwFlags); 函数功能:该函数可得到系统中显示设备的信息。 注释:为了查询系统的所有显示设备,在一个循环中调用该函数开始时iDevNum设为0,并增加iDevNum,直到函数失败。
5.BOOL EnumDisplaySettings(LPCTSTR lpszDeviceName, DWORD iModeNum, LPDEVMODE lpDevMode);
函数功能:该函数得到显示设备的一个图形模式设备,通过对该函数一系列的调用可以得到显示设备所有的图形模式信息。
参数:
lpszDeviceName:指向一个以null的结尾的字符串,该字符串指定了显示设备。此函数将获得该显示设备的图形模式信息。该参数可以为NULL。NULL值表明调用线程正运行在计算机的当前显示设备上。如果lpszDeviceName为NULL,该字符串的形式为\\.\displayx,其中x的值可以为1、2或3。对于Windows 95和Windows 98,lpszDeviceName必须为NULL。
iModeNum:表明要检索的信息类型,该值可以是一个图形模式索引,也可以是下列一值:
ENUM_CURRENT_SETTINGS:检索显示设备的当前设置。
ENUM_REGISTRY_SETTINGS:检索当前存储在注册表中的显示设备的设置。
图形模式索引值从零开始,要得到一个显示设备的所有图形模式信息,可以一系列地调用EnumDisplaySettings函数,并且iModeNum显为一个非零值时,则函数返回的信息是最近一次使用iModeNum置为零调用该函数时存储的信息。
lpDevMode:DEVMODE结构的指针,该结构存储指定图形模式的信息,在调用EnumDisplaySettings之前,设置dmSize为sizeof(DEVMODE),并且以字节为单位,设置dmDriveExtra元素为接收专用驱动数据可用的附加空间。
EnumDisplaySettings函数设置如下五个DEVMODE元素的值:dmBitsPerpel、dmPelsWidth、dmPelsHeight、dmDisplayFlags、dmDisplayFrequency。
返回值:如果成功,返回非零值;如果失败,返回零。
Windows NT:若想获得更多错误信息,请调用GetLastError函数。
注释:如果iModeNum大于显示设备最后的图形模式索引,那么函数就会失败,如同在iModeNum参数中描述的那样,使用这种方法可以枚举显示设备所有的图形模式。
|
|