【问题标题】:SDL2 toggle SDL_WINDOW_RESIZABLE state for fake fullscreenSDL2 为假全屏切换 SDL_WINDOW_RESIZABLE 状态
【发布时间】:2014-11-24 23:30:25
【问题描述】:

要在没有模式集的 SDL2 中创建一个“假”全屏窗口,您可以使用类似的方法创建一个无边界、最大化的窗口。

int idx = SDL_GetWindowDisplayIndex(g_displayWindow);
SDL_Rect bounds;
SDL_GetDisplayBounds(idx, &bounds);
//SDL_SetWindowResizable(g_displayWindow, SDL_FALSE);
SDL_SetWindowBordered(g_displayWindow, SDL_FALSE);
SDL_SetWindowPosition(g_displayWindow, bounds.x, bounds.y);
SDL_SetWindowSize(g_displayWindow, bounds.w, bounds.h);

对于不可调整大小的窗口,这非常有效。在使用 SDL_WINDOW_RESIZABLE 创建的窗口上,屏幕底部和右侧边缘(在窗口上)有一个恼人的灰色边框。不幸的是,没有 SDL_SetWindowResizable 函数(从 SDL 2.0.4 开始)。我们如何在不重新创建窗口的情况下摆脱调整大小的边框?

SDL_WINDOW_FULLSCREEN_DESKTOP 和 SDL_WINDOW_FULLSCREEN 都做了一个我想避免的模式集——它需要更长的时间,更难用 alt-tab 退出,如果游戏在调试器中遇到断点,它会锁定整个系统。

【问题讨论】:

  • SDL_WINDOW_FULLSCREEN_DESKTOP 不应像 SDL_WINDOW_FULLSCREEN 那样导致完全切换显示模式。他们对你的行为是否相同?它正是为这种情况而设计的,您需要一个未装饰的窗口来填满整个屏幕,并且您希望它以跨平台的方式完成。
  • 我做了 SDL_WINDOW_FULLSCREEN_DESKTOP。它似乎没有做显示模式切换。但它确实锁定了调试器中断(在单屏系统上)。但是,将窗口设置为完整显示大小具有相同的行为。可以通过睡眠和唤醒笔记本电脑回到 VS。 :-/
  • 它永远不应该锁定系统,如果程序本身不能正常运行,ctrl+alt+delete 总是可以让你退出

标签: c++ c windows sdl sdl-2


【解决方案1】:

这就是我想出的——在 Windows 上测试并运行。

void SDL_SetWindowResizable(SDL_Window *win, SDL_bool resizable)
{
    SDL_SysWMinfo info;
    SDL_VERSION(&info.version);
    SDL_GetWindowWMInfo(g_displayWindow, &info);

#if WIN32
    HWND hwnd = info.info.win.window;
    DWORD style = GetWindowLong(hwnd, GWL_STYLE);
    if (resizable)
        style |= WS_THICKFRAME;
    else
        style &= ~WS_THICKFRAME;
    SetWindowLong(hwnd, GWL_STYLE, style);
#endif
}

【讨论】:

    【解决方案2】:

    SDL_SetWindowResizable() 函数已添加到 2016 年 10 月发布的 SDL 2.0.5 中。Announcing SDL 2.0.5

    假设您的 SDL_Window 指针(您从 SDL_CreateWindow() 获得)命名为 window,请使用:

    /* To disable resizing: */
    SDL_SetWindowResizable(window, SDL_FALSE);
    
    /* To enable resizing: */
    SDL_SetWindowResizable(window, SDL_TRUE);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-03
      相关资源
      最近更新 更多