2016-12-15 274 views
2

我希望SDL窗口大小保持在排除Windows任務欄其他面板的窗口的working area (SPI_GETWORKAREA)之內。SDL調整窗口大小

問題是,SDL_CreateWindowSDL_SetWindowSize都設置窗口的客戶區,而不是包含窗口邊框的大小。因此,當我設置窗口大小以適應小型工作區域時,邊界仍然離開工作區域。

SDL_CreateWindow:使用此功能設置窗口的客戶區的大小。

SDL是否提供了在工作區域內設置窗口大小的方法?或者我如何獲得SDL窗口的邊框大小,以便我可以自己做到這一點?

回答

3

我知道的(SDL 1.2)的唯一方法是首先創建一個小窗口(2×2像素),然後使用Windows API(GetWindowPlacement)檢查總窗口大小。基於此,您可以計算獲得您正在查找的窗口大小所需的參數,並最終調整窗口大小(MoveWindow)。

我希望有人有更好的解決方案,因爲這是一個非常醜陋的解決方法。

+0

我認爲你不需要創建2x2大小的窗口。如果您使用的是Windows API,您可以使用'GetWindowPlacement'獲取窗口座標,然後使用'ClientToScreen'在屏幕上獲取客戶區座標。對這兩個數學進行計算會得出邊界的大小。 – SMUsamaShah

+0

如果您找到一個解決方案,可以直接創建尺寸正確的窗口,而不必先顯示任何臨時窗口,請發佈您的代碼。 –

+0

要使用WinAPI,我們需要首先有窗口。我無法單獨用SDL找到一種方法。 – SMUsamaShah

2

使用SDL_GetWindowSize()查詢屏幕座標中的客戶區大小,SDL_GL_GetDrawableSize()SDL_GetRendererOutputSize()查詢以像素爲單位的可繪製大小。

編輯1:

你提到你使用的是Windows,所以你可以使用GetWindowRect(),讓你包括窗口邊框和GetClientRect()給你排除了邊界矩形的矩形A - 分配給窗口特定圖形的區域。

注: 請注意,GetWindowRect()回報在屏幕的矩形座標 - 這是相對於屏幕/顯示器座標。​​返回一個相對於自身的矩形。

例如:當您使用WINAPI時,您可以看到工作示例from here