【发布时间】: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 总是可以让你退出