SDL调整窗口大小

我希望SDL窗口大小保持在排除Windows任务栏其他面板的窗口的工作区域(SPI_GETWORKAREA)内。

问题是SDL_CreateWindow和SDL_SetWindowSize都设置了窗口的客户区,而不是包括窗口边框的大小。 所以当我设置窗口大小以适应一个小的工作区域时,边界仍然离开工作区域。

SDL_CreateWindow:使用此函数来设置窗口客户区的大小。

SDL是否提供了在工作区域内设置窗口大小的方法? 或者如何获得SDL窗口的边框大小,以便我自己可以做到这一点?

我知道(SDL 1.2)的唯一方法是先创建一个小窗口(2×2像素),然后使用Windows API(GetWindowPlacement)检查总窗口大小。 基于此,您可以计算获得您正在查找的窗口大小所需的参数,并最终调整窗口大小(MoveWindow)。

我希望有人有一个更好的解决方案,因为这是一个非常丑陋的解决方法。

使用SDL_GetWindowSize()查询屏幕坐标中的客户区大小,使用SDL_GL_GetDrawableSize()SDL_GetRendererOutputSize()查询可绘制大小(以像素为单位)。

编辑1:

你已经提到你正在使用Windows,所以你可以使用GetWindowRect()给你的矩形,包括窗口的边界, GetClientRect()给你的矩形排除边界 – 分配给窗口的区域具体图纸。

注意:请注意GetWindowRect()在屏幕坐标中返回一个矩形 – 相对于屏幕/显示器的坐标。 GetClientRect()返回一个相对于自身的矩形。

例如:当您使用WINAPI时,您可以从这里看到工作示例。

你甚至不需要WinAPI来做到这一点。

窗口边框的大小可以通过SDL_GetWindowBordersSize()来确定,并且显示中没有被任务栏占用的部分应该由SDL_GetDisplayUsableBounds()返回。

有了这些功能,保持适当的窗口位置(和大小)应该很容易。