可以訪問系統注冊表HKEY_CURRENT_CONFIGDISPLAYSETINGS來獲知當
前的顯示分辨率和顏色數。
但常用以下方法:
關鍵的API函數是EnumDisplaySettings和ChangeDisplaySettings。前
者用來獲得當前顯示驅動所支持的所有顯示模式,而後者用來改變顯示模式。
如果有個程序改變了顯示模式, 則Windows會向所有正在運行的程序發送
WM_DISPLAYCHANGE消息。獲得當前顯示模式可以使用下面的函數,它比訪問
注冊表可靠。
Bool CVideoModes :: 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;
}
下面的代碼展示了如何使用EnumDisplaySettings獲得當前支持的所有顯示模式:
int modenum,done;
DEVMODE devmode;
done=0;
modenum=0;
do
{
done=!EnumDisplaySettings(NULL,modenum,&devmode);
AddToList(&devmode);
modenum++;
}while (!done);
設置顯示模式的方法如下:
rc = ChangeDisplaySettings(&devmodeCDS_FULLSCREEN));這裡的devmode就
是前面使用EnumDisplaySettings獲得的。
如果設置正常,返回值DISP_CHANGE_SUCCESSFUL。