分类: LINUX
2009-03-06 19:52:54
看NeHe教程中第1课时遇到了显示器设置方面的问题,GOOGLE了一下,看到一篇文章,感觉有用,如下:
显示器所显示的内容对应于显存,在显示器上最小的单位是象素(Pixel,这里仅考虑逻辑象素),显存的最小的单位是位(Bits)。 显示器
在VC中提供了修改显示设备(如显示器、打印机等等,本文只就显示器而言)属性的函数ChangeDisplaySettings(),该函数能够按照你的需要对显示设备作出相应的修改。其函数的原型为:LONG ChangeDisplaySettings(LPDEVMODE lpDevMode,?DWORD dwflags),其参数的含义如下:
dmSize:所用DEVMODE数据结构的大小(以Bytes为单位);
dmBitsPerPel :每象素所使用的显存位数(Bits);
dmPelsWidth :水平分辨率(点数);
dmPelsHeight Pixel height :垂直分辨率(点数);
dmDisplayFrequency :显示刷新率,以赫兹为单位;
Dwflags:表明对显示设备的修改方式。具体取值有以下几种:0 :动态改变显示设备属性;CDS_UPDATEREGISTRY:动态改变显示设备属性并修改
对于系统的显示特性编程,还有一个关键的API函数EnumDisplaySettings()用来获得当前显示驱动所支持的所有显示模式。获得当前显示模式可以使用下面的函数:
Bool GetCurrentVideoSettings(DEVMODE *devmode) { HWND hwndDesktop=GetDesktopWindow(); HDC hdc=GetDC(hwndDesktop); devmode -> dmSize =sizeof(DEVMODE); devmode -> dmBitsPerPel=GetDeviceCaps(hdc,BITSPIXEL); devmode -> dmPelsWidth=GetSystemMetrics(SM_CXSCREEN); devmode -> dmPelsHeight=GetSystemMetrics(SM_CYSCREEN); devmode -> dmFields=DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT; return TRUE; } |
int modenum,done; DEVMODE devmode; done=0; modenum=0; do { done=!EnumDisplaySettings(NULL,modenum,&devmode); AddToList(&devmode); modenum++; }while (!done); |