我使用此功能来改变分辨率:
ChangeResolution(NULL,1440,900);
bool ChangeResolution(WCHAR *sDeviceName, int iNewW, int iNewH)
{
DEVMODE oDEVMODE = { 0 };
oDEVMODE.dmSize = sizeof(DEVMODE);
EnumDisplaySettings(sDeviceName, ENUM_CURRENT_SETTINGS, &oDEVMODE);
oDEVMODE.dmPelsWidth = iNewW;
oDEVMODE.dmPelsHeight = iNewH;
bool bUpdateReg = true;
LONG lRet = ChangeDisplaySettings(&oDEVMODE, CDS_TEST | CDS_UPDATEREGISTRY);
if (lRet != DISP_CHANGE_SUCCESSFUL)
{
lRet = ChangeDisplaySettings(&oDEVMODE, CDS_TEST);
bUpdateReg = false;
}
if (lRet == DISP_CHANGE_SUCCESSFUL)
lRet = ChangeDisplaySettings(&oDEVMODE, bUpdateReg?CDS_UPDATEREGISTRY : 0);
return lRet == DISP_CHANGE_SUCCESSFUL;
}
这很有效。
桌面扩展时出现问题(按Windows键+ P并选择“扩展”)。然后桌面扩展(到非心理显示),使用我的ChangeResolution后,一旦我的函数调用ChangeDisplaySettings(& oDEVMODE,bUpdateReg?CDS_UPDATEREGISTRY:0),屏幕就会变黑;
恢复屏幕的方法是再次按Windows键+ P,然后按Enter键。
(由于屏幕是黑色的,你真的不知道你做了什么。)
无论我设定哪种新分辨率,它都会变黑。
如果我在扩展模式下尝试更改分辨率,但是从控制面板可以很好地改变分辨率,那么问题在于我的功能。
我认为这是因为当我更改默认屏幕的分辨率(NULL)时,我还需要为虚拟屏幕更改某些内容 - 但我不确定。
任何帮助?
谢谢!