我希望SDL窗口大小保持在窗口的working area (SPI_GETWORKAREA)范围内,这会排除Windows任务栏其他面板。
问题是SDL_CreateWindow和SDL_SetWindowSize都设置了窗口的客户区域,而不是包括窗口边框的大小。因此,当我将窗口大小设置为适合小工作区域时,边框仍会离开工作区域。
SDL_CreateWindow:使用此功能设置窗口 客户区 的大小。
SDL是否提供了在工作区域内设置窗口大小的方法?或者我如何获得SDL窗口的边框大小以便我自己可以做到这一点?
答案 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()
返回。
使用这些功能,保持适当的窗口位置(可能是大小)应该很容易。