使用SDL处理最大化的窗口

前端之家收集整理的这篇文章主要介绍了使用SDL处理最大化的窗口前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_301_3@
我们最近将GL000从GLUT移植到SDL.这样做有很多好处,但也有一些缺点,特别是在窗口管理方面.

Bitfighter在固定宽高比窗口(800×600像素)下运行.用户可以将窗口设置为他们想要的任何大小,但我们捕获resize事件并调整所请求的大小以确保窗口保持正确的比例(使用SDL_SetVideoMode).

(以下问题适用于Windows,但尚未在其他平台上进行过测试.我在下面描述的内容特指Windows,但我正在寻找独立于平台的解决方案.)

通常,这种方法很有效,除非用户通过双击标题栏或使用最大化按钮来最大化窗口.在这种情况下,调用窗口调整大小事件的窗口大小接近屏幕大小(减去窗口装饰的一些像素).不幸的是,当窗口最大化时,SDL_SetVideoMode没有效果(与能够调整最大化窗口的GLUT不同).此外,后续调用SDL_GetVideoInfo报告我们请求的大小,而不是窗口的实际当前大小,因此很难判断尝试的大小调整是否有效.

我正在寻找一种独立于平台的方式来执行以下任何操作(按优先级降序排列):

>在窗口最大化后调整窗口大小
>检测窗口何时最大化,以便知道我无法调整窗口大小,我至少可以将视频调整为居中
>防止窗口最大化(阻止双击窗口标题栏,使用最大化按钮,并将窗口拖动到屏幕顶部)

Bitfighter是用C语言编写的,我们正在使用SDL的最新官方版本.

解决方法

迁移到SDL 2.0(您似乎已经拥有)

SDL 2.0为窗口管理提供了更好的API(它实际上提供了一个).虽然SDL 2.0中的Windows管理仍然存在许多错误(特别是在Linux方面),但自1.2天以来它已经有了很大的改进.

@H_301_3@

猜你在找的Windows相关文章