2010-06-04 96 views
4

如果使用SDL_SetVideoMode()創建窗口,則返回表面而不是窗口句柄。有沒有辦法獲得SDL_Window句柄?我知道有一個SDL_GetWindowFromID函數,但我也不知道如何獲取ID,除了SDL_GetWindowID函數,這將需要我已經有窗口句柄。當使用SDL_SetVideoMode時,有沒有辦法獲得內部SDL_Window指針或ID?

有什麼建議嗎?請注意,保持跨平臺可移植性非常重要,因此如果可能的話,我更願意使用內置的SDL功能。

如果它有幫助,我試圖獲取和設置窗口位置和窗口大小,而這些功能需要一個窗口句柄。

謝謝!

編輯:我還應該提到,我正在改變視頻模式在用戶的請求,所以我不能只使用默認ID爲1,因爲這個ID改變每次我調用SDL_SetVideoMode()。

回答

-1

SDL_SetVideoMode基於視頻幀緩衝區返回表面,而不是在窗口上(就像SDL_GetVideoSurface)。你似乎認爲所有的表面都與窗口相對應,但事實並非如此。

+1

(檢查初始化中的錯誤)。但SDL_SetVideoMode函數也負責創建窗口。我想獲得一個指向它創建的SDL_Window的指針。 – Kelsie 2010-06-04 02:47:43

+0

@chrensli,我認爲你錯了 - 你能指點我在SDL文檔中的位置,他們說SetVideoMode創建一個窗口?無論如何,爲了獲得一個全屏窗口,爲什麼不使用帶'True'參數的'SDL_Window'構造函數(該參數的名字是'fullscreen',默認爲'False')。 – 2010-06-04 03:24:23

+1

http://www.libsdl.org/cgi/docwiki.cgi/SDL_SetVideoMode - 標誌列表包含兩個標誌(SDL_NOFRAME和SDL_RESIZABLE),它們與創建窗口完全相關。但是我也在查看這個函數的源代碼,它使用SDL_CreateWindow來創建一個窗口。我最終做了一些有點冒險的事情 - 我在SDL_SetVideoMode函數附近添加了一個SDL_GetWindow函數,該函數返回我正在嘗試獲取的窗口句柄。但這不是一件好事。我可以自己創建一個窗口,但似乎有很多這樣做。 – Kelsie 2010-06-04 03:31:49

0

我有這個確切的問題 - 舊的SDL 1.2只使用一個窗口,所以它保持自己的句柄。下面是我從閱讀源代碼中發現的方法:

包括SDL_syswm.h然後利用獲取的窗口句柄SDL_GetWMInfo

例如我對獲得手柄Windows代碼:

SDL_SysWMinfo wmInfo; 
SDL_GetWMInfo(&wmInfo); 
HWND window = wmInfo.window; 
1

我與SDL-1.2.15的Windows相同的問題,而是由GetActiveWindow解決了這個問題。

你可以得到SDL窗口句柄是這樣的:

... 
screen = SDL_SetVideoMode(w, h, 0, flags); 
... 
HWND hnd= GetActiveWindow(); 

看到這個:我不使用表面處理它返回時,除了檢查,它不爲空 GetActiveWindow function

相關問題