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