我们最近将Bitfighter从GLUT移植到SDL。这样做有很多好处,但也有一些缺点,特别是在窗口管理领域。使用SDL处理最大化窗口
Bitfighter运行在固定纵横比窗口(800x600像素)。用户可以根据自己的需要设置任意大小的窗口,但我们捕获大小调整事件并根据请求的大小进行调整,以确保窗口保持正确的比例(使用SDL_SetVideoMode)。
(以下问题适用于Windows,但尚未在其他平台上进行测试。我在下面说明具体指的是Windows,虽然我在寻找一个独立于平台的解决方案。)
通常,这非常好,除非用户通过双击标题栏或使用最大化按钮来最大化窗口。在这种情况下,调用窗口大小事件的窗口大小近似于屏幕大小(窗口装饰减去一些像素)。不幸的是,当窗口被最大化时,SDL_SetVideoMode没有效果(不像GLUT能调整最大化的窗口)。此外,随后对SDL_GetVideoInfo的调用会报告我们请求的大小,而不是实际当前的窗口大小,因此很难判断尝试调整大小是否奏效。
我找了一个独立于平台的方式做任何以下的(按优先顺序排列):它被最大化
- 调整窗口大小知道我无法调整它的大小,我至少可以调整视频中心
- 防止最大化窗口(阻止双击窗口标题栏,使用最大化按钮,并拖动窗口到屏幕上方)
Bitfighter是用C++编写的,我们正在使用SDL的最新官方版本。
您是否有能力尝试SDL 1.3 HEAD? – genpfault 2012-01-03 15:39:06
我们可能会;取决于它的稳定性。我们希望在几周内发布。 – Watusimoto 2012-01-05 10:27:42
查看您的代码,看起来您已经迁移到SDL 2.0。这是否解决了你的问题? – faffy 2012-08-23 18:57:01