2015-08-30 59 views
9

我使用以下結構來獲取調整大小的SDL窗口的新寬度和高度。但是通過這種結構,我只能在完成調整大小後才能獲取新數據,即完成拖動並釋放鼠標按鈕時。如何連續獲取新數據,即我拖動窗口的時間。在SDL中獲取Contiunous Window Resize事件2

if (sdl_set->GetMainEvent()->type == SDL_WINDOWEVENT) 
{ 
    if (sdl_set->GetMainEvent()->window.event == SDL_WINDOWEVENT_RESIZED) 
    { 
    ScreenWidth = sdl_set->GetMainEvent()->window.data1; 
    ScreenHeight = sdl_set->GetMainEvent()->window.data2; 
    cout << "Window Resized!" << endl; 
    } 
} 
+2

嘗試['SDL_WINDOWEVENT_SIZE_CHANGED'](https://wiki.libsdl.org/SDL_WindowEventID) – Drop

+3

SDL_WINDOWEVENT_SIZE_CHANGED不記錄爲提供連續調整大小更新。並且在實驗上(在Mac OS X上)它沒有。 我也想知道如何在用戶手勢過程中獲得連續調整大小的事件! https://wiki.libsdl.org/SDL_WindowEventID –

+3

這實際上是不可能的,因爲這個bug:https://bugzilla.libsdl.org/show_bug.cgi?id=2077 –

回答

2
static int resizingEventWatcher(void* data, SDL_Event* event) 
    if (event->type == SDL_WINDOWEVENT && 
     event->window.event == SDL_WINDOWEVENT_RESIZED) { 
    SDL_Window* win = SDL_GetWindowFromID(event->window.windowID); 
    if (win == (SDL_Window*)data) { 
     printf("resizing.....\n"); 
    } 
    } 
    return 0; 
} 

int main() { 
    SDL_Window* win = ... 
    ... 
    SDL_AddEventWatch(resizingEventWatcher, win); 
    ... 
} 

使用SDL的EventWatch可以解決這個問題。

+1

我想知道爲什麼它不同於'SDL_PollEvent'辦法? – pergy

0

如果你在Windows上,你有沒有嘗試過使用Windows API?

我知道它不是一個真正的解決方法,但如果你沒有製作跨平臺的應用程序,你應該試試看。

使用HWND查找SDL的窗口並返回窗口大小。