ChangeDisplaySettings(NULL,0)移动/调整窗口大小

时间:2013-03-10 22:36:38

标签: c++ winapi resize window fullscreen

我有一个800x600的窗口,这是我用来切换全屏模式的代码:

void Window::SetFullscreen(bool value)
{
    if(_fullscreen == value)
    {
        return;
    }

    _fullscreen = value;

    if(_fullscreen)
    {
        SetWindowLongPtr(_window, GWL_STYLE, WS_POPUP);
        SetWindowPos(_window, HWND_TOP, 0, 0, _width, _height, SWP_SHOWWINDOW);

        EnumDisplaySettings(null, 0, &_devmode);

        _devmode.dmSize = sizeof(_devmode);
        _devmode.dmPelsWidth = _width;
        _devmode.dmPelsHeight = _height;
        _devmode.dmBitsPerPel = 32;         
        _devmode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;

        ChangeDisplaySettings(&_devmode, CDS_FULLSCREEN);
    }
    else
    {
        cout<<"---"<<endl;
        ChangeDisplaySettings(null, 0);
        cout<<"---"<<endl;

        SetWindowLongPtr(_window, GWL_STYLE, WS_OVERLAPPEDWINDOW);
        SetWindowPos(_window, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);
    }
}

每次我从全屏模式转到窗口模式,ChangeDisplaySettings(null,0);将我的窗口调整为1366x768(wtf ?? ??!!),这是我的默认屏幕分辨率。我怎么能阻止这个? (之后将窗口调整为800x600不是可接受的选项)

1 个答案:

答案 0 :(得分:2)

您未能回复WM_GETMINMAXINFO。如果你在那里返回800x600,Windows会知道你的窗口无法调整为1366x768。