SDL2切换全屏:窗口位置重置

SDL2 Toggle fullscreen: Window position gets reset

本文关键字:窗口 位置 SDL2      更新时间:2023-10-16

我正在尝试在sdl2中切换全屏,到目前为止它可以使用。但是,当模式返回窗口模式时,位置将重置为0、0。我尝试在窗口完整屏幕上存储窗口的最后一个位置,但是在窗口返回窗口后,potiton仍将重置为0,0。/p>

我正在输出最后一个位置,这似乎是正确的,但是返回到窗口时仍将重置为0,0。我需要听一个活动或其他内容吗?

void ToggleFullscreen(SDL_Window* window) {
    Uint32 flag = SDL_WINDOW_FULLSCREEN;
    bool isFullscreen = SDL_GetWindowFlags(window) & flag;
    if(!isFullscreen){
        SDL_GetWindowPosition(window, &lastWindowX, &lastWindowY);
    }
    SDL_SetWindowFullscreen(window, isFullscreen ? 0 : flag);
    if(isFullscreen){
        cout << "set window to: " << lastWindowX << " " << lastWindowY << endl;
        SDL_SetWindowPosition(window, lastWindowX, lastWindowY);
    }
}

查看我的一个项目,该项目可以设置窗口,全屏或全屏桌面,我找到了这两行:

// Fixes problem when Game::changeResolution is called in fullscreen or fullscreen desktop and then return to windowed.
SDL_SetWindowSize(m_pWindow, m_width, m_height);
SDL_SetWindowPosition(m_pWindow, SDL_WINDOWPOS_CENTERED, 
SDL_WINDOWPOS_CENTERED);

首先完成SDL_SetWindowSize,一切正常。然后我评论了SDL_SetWindowSize行,然后再次运行。从SDL_WINDOW_FULLSCREEN_DESKTOP返回时,将其重置为(0,0)

尽管从SDL_WINDOW_FULLSCREEN返回到窗口时,它的放置还可以。尝试添加该行,看看它是否为您解决了问题。也尝试在呼叫之间添加SDL_Delay(2000);