我們最近將Bitfighter從GLUT移植到SDL。這樣做有很多好處,但也有一些缺點,特別是在窗口管理領域。使用SDL處理最大化窗口
Bitfighter運行在固定縱橫比窗口(800x600像素)。用戶可以根據自己的需要設置任意大小的窗口,但我們捕獲大小調整事件並根據請求的大小進行調整,以確保窗口保持正確的比例(使用SDL_SetVideoMode)。
(以下問題適用於Windows,但尚未在其他平臺上進行測試。我在下面說明具體指的是Windows,雖然我在尋找一個獨立於平臺的解決方案。)
通常,這非常好,除非用戶通過雙擊標題欄或使用最大化按鈕來最大化窗口。在這種情況下,調用窗口大小事件的窗口大小近似於屏幕大小(窗口裝飾減去一些像素)。不幸的是,當窗口被最大化時,SDL_SetVideoMode沒有效果(不像GLUT能調整最大化的窗口)。此外,隨後對SDL_GetVideoInfo的調用會報告我們請求的大小,而不是實際當前的窗口大小,因此很難判斷嘗試調整大小是否奏效。
我找了一個獨立於平臺的方式做任何以下的(按優先順序排列):它被最大化
- 調整窗口大小知道我無法調整它的大小,我至少可以調整視頻中心
- 防止最大化窗口(阻止雙擊窗口標題欄,使用最大化按鈕,並拖動窗口到屏幕上方)
Bitfighter是用C++編寫的,我們正在使用SDL的最新官方版本。
您是否有能力嘗試SDL 1.3 HEAD? – genpfault 2012-01-03 15:39:06
我們可能會;取決於它的穩定性。我們希望在幾周內發佈。 – Watusimoto 2012-01-05 10:27:42
查看您的代碼,看起來您已經遷移到SDL 2.0。這是否解決了你的問題? – faffy 2012-08-23 18:57:01