在桌面扩展时使用ChangeDisplaySettings更改分辨率会导致黑屏

时间:2015-06-23 21:03:08

标签: c windows winapi

我使用此功能来改变分辨率:

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)时,我还需要为虚拟屏幕更改某些内容 - 但我不确定。

任何帮助?

谢谢!

0 个答案:

没有答案