在VC中修改显示器的分辩率和色彩
在日常的程序开发中,有时我们想让自己编写的程序运行在显示器一定的分辨率和色彩数目下。如何让程序自动修改当前的显示器设置呢?这首先得从显示器的工作原理谈起。
一、相关原理
我们知道,显示器所显示的内容对应于显存,在显示器上最小的单位是象素(Pixel,这里仅考虑逻辑象素),显存的最小的单位是位(Bits)。 显示器工作的特征主要体现在色彩数和分辨率两方面。显示器所显示的色彩的数目取决于单位象素所使用的显存的位数(Bits)。在显存中,如果8位显存(即一个向象素使用了一字节的显存)对应于显示器上的一个象素,那么显示器所显示的色彩数目为28=256色;同样,如果当前的色彩为16位,那么显示器所显示的色彩数目为216=65536种色彩。显示器的分辨率指的是水平分辨率和垂直分辨率,经常所说的800X600,就是指在水平方面上所显示的象素为800个,在垂直方面上所显示的象素为600个。
在VC中提供了修改显示设备(如显示器、打印机等等,本文只就显示器而言)属性的函数:ChangeDisplaySettings,该函数能够按照你的需要对显示设备作出相应的修改。其函数申明如下:
LONG ChangeDisplaySettings(
LPDEVMODE lpDevMode,
DWORD dwflags
);
其参数的含义如下:
lpDevMode:一个指向DEVMODE数据结构的指针,DEVMODE的数据结构描述了欲设定显示器的各类属性值。通常情况下使用到的参数有:
dmSize:所用DEVMODE数据结构的大小(以Bytes为单位)
dmBitsPerPel :每象素所使用的显存位数(Bits)
dmPelsWidth Pixel width :水平分辨率(点数)
dmPelsHeight Pixel height :垂直分辨率(点数)
dmDisplayFrequency Mode frequency :显示刷新率,以赫兹为单位
dmFields:通常情况下,不同的显示设备(如打印机)用到的DEVMODE数据结构的内容不同,比如设定打印机时,你不会用到dmDisplayFrequency属性。所以,在你使用DEVMODE数据结构时,应向系统说明你具体用到的有效数据成员,dmFields的用处便在于此。如果在程序中只用到dmPelsWidth(水平分辨率)和dmPelsHeight(垂直分辨率),那么该值应为DM_PELSWIDTH|DM_PELSHEIGHT。
Dwflags:表明对显示设备的修改方式。具体取值有以下几种:
0 :动态改变显示设备属性
CDS_UPDATEREGISTRY:动态改变显示设备属性并修改注册表相关设置,下次启动计算机时,本次所做的修改依然有效
CDS_TEST: 测试所做的修改是否有效
- 上一篇:如何在VC++中使用注册表
- 下一篇:在VC++应用程序中读取文本数据