SDL调整窗口大小

时间:2016-12-15 14:18:16

标签: c++ windows sdl sdl-2

我希望SDL窗口大小保持在窗口的working area (SPI_GETWORKAREA)范围内,这会排除Windows任务栏其他面板。

问题是SDL_CreateWindowSDL_SetWindowSize都设置了窗口的客户区域,而不是包括窗口边框的大小。因此,当我将窗口大小设置为适合小工作区域时,边框仍会离开工作区域。

  

SDL_CreateWindow:使用此功能设置窗口 客户区 的大小。

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

修改1:

你已经提到你正在使用Windows,所以你可以使用GetWindowRect()为你提供包含窗口边框的矩形,GetClientRect()为你提供排除边框的矩形 - 分配给窗口特定图纸的区域。

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

示例:当您使用WINAPI时,您可以看到工作示例from here

答案 2 :(得分:2)

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

窗口边框的大小可由SDL_GetWindowBordersSize()确定,而显示的未被任务栏占用的部分应由SDL_GetDisplayUsableBounds()返回。

使用这些功能,保持适当的窗口位置(可能是大小)应该很容易。