0

私は 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 に戻すことは、受け入れられるオプションではありません)

4

1 に答える 1

2

に応答できませんでしたWM_GETMINMAXINFO。そこで 800x600 を返した場合、Windows はウィンドウのサイズを 1366x768 に変更できないことを認識していたでしょう。

于 2013-03-11T12:46:20.833 に答える