1. 枚举所有支持的分辨率方案
CString str = _T("");
DEVMODE mode;
ZeroMemory(&mode, sizeof(mode));
mode.dmSize = sizeof(mode);
int i = 0;
BOOL Result = EnumDisplaySettings(NULL, i, &mode);
while (Result)
{
str.Format(_T("%d*%d*%d位色"), mode.dmPelsWidth, mode.dmPelsHeight, mode.dmBitsPerPel);
AfxMessageBox(str);
Result = EnumDisplaySettings(NULL, ++i, &mode);
}
2. 枚举当前使用的分辨率方案
CString str = _T("");
DEVMODE mode;
ZeroMemory(&mode, sizeof(mode));
mode.dmSize = sizeof(mode);
BOOL Result = EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &mode);
if (Result) {
str.Format(_T("当前设置:%d*%d*%d位色"), mode.dmPelsWidth, mode.dmPelsHeight, mode.dmBitsPerPel);
AfxMessageBox(str);
}
Result = EnumDisplaySettings(NULL, ENUM_REGISTRY_SETTINGS, &mode);
if (Result) {
str.Format(_T("注册表设置:%d*%d*%d位色"), mode.dmPelsWidth, mode.dmPelsHeight, mode.dmBitsPerPel);
AfxMessageBox(str);
}
3. 修改分辨率
//检测当前分辨率
int Width = GetSystemMetrics(SM_CXSCREEN);
int Height = GetSystemMetrics(SM_CYSCREEN);
DEVMODE lpDevMode0;
lpDevMode0.dmBitsPerPel = 32;
lpDevMode0.dmPelsWidth = Width;
lpDevMode0.dmPelsHeight = Height;
lpDevMode0.dmSize = sizeof(lpDevMode0);
lpDevMode0.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL;
//修改
DEVMODE lpDevMode;
lpDevMode.dmBitsPerPel = 32;
lpDevMode.dmPelsWidth = 1024;
lpDevMode.dmPelsHeight = 768;
lpDevMode.dmSize = sizeof(lpDevMode);
lpDevMode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL;
LONG result;
result = ChangeDisplaySettings(&lpDevMode, 0);
if (result == DISP_CHANGE_SUCCESSFUL)
{
//MessageBox("修改成功!");
ChangeDisplaySettings(&lpDevMode, CDS_UPDATEREGISTRY);
// //使用CDS_UPDATEREGISTRY表示次修改是持久的,
// //并在注册表中写入了相关的数据
//MessageBox("修改成功!还原");
if (IDOK)
{
ChangeDisplaySettings(&lpDevMode0, CDS_UPDATEREGISTRY);
}
}
else
{
//MessageBox("修改失败,恢复原有设置!");
ChangeDisplaySettings(NULL, 0);
}