我们最近将Bitfighter从 GLUT 移植到 SDL。这样做有很多好处,但也有一些缺点,尤其是在窗口管理领域。
Bitfighter 在固定纵横比窗口(800x600 像素)中运行。用户可以将他们的窗口设置为任何他们想要的大小,但我们会捕获调整大小事件并对请求的大小进行调整,以确保窗口保持正确的比例(使用 SDL_SetVideoMode)。
(以下问题适用于Windows,但尚未在其他平台上进行测试。我下面描述的内容专门针对Windows,尽管我正在寻找与平台无关的解决方案。)
通常,这很有效,除非用户通过双击标题栏或使用最大化按钮来最大化他们的窗口。在这种情况下,窗口大小调整事件被调用,窗口大小接近屏幕大小(减去一些用于窗口装饰的像素)。不幸的是,当窗口最大化时, SDL_SetVideoMode 不起作用(不像 GLUT 能够调整最大化窗口的大小)。此外,对 SDL_GetVideoInfo 的后续调用会报告我们请求的大小,而不是窗口的实际当前大小,因此很难判断尝试调整大小是否有效。
我正在寻找一种独立于平台的方式来执行以下任何操作(按偏好降序排列):
- 最大化后调整窗口大小
- 检测窗口何时最大化,以便知道我无法调整它的大小,我至少可以将视频调整为居中
- 防止窗口最大化(阻止双击窗口标题栏、使用最大化按钮以及将窗口拖到屏幕顶部)
Bitfighter 是用 C++ 编写的,我们使用的是最新的 SDL 官方版本。