2015-08-30 7 views
9

Ich verwende die folgende Struktur, um eine neue Breite und Höhe des angepassten SDL-Fensters zu erhalten. Aber mit dieser Struktur bin ich nur in der Lage, neue Daten zu erhalten, nachdem die Größenänderung durchgeführt wurde, dh wenn ich mit dem Ziehen fertig bin und die Maustaste loslasse. Wie kann ich die neuen Daten kontinuierlich erhalten, also während ich das Fenster ziehe?Continuous Window Resize Event in SDL 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

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

+3

SDL_WINDOWEVENT_SIZE_CHANGED ist NICHT dokumentiert, da kontinuierliche Aktualisierungen für die Größenänderung bereitgestellt werden. Und experimentell (auf Mac OS X) tut es nicht. Ich würde auch gerne wissen, wie kontinuierliche Größe ändern Ereignisse während der Benutzergeste! https://wiki.libsdl.org/SDL_WindowEventID –

+3

Es ist eigentlich unmöglich wegen dieses Fehlers: https://bugzilla.libsdl.org/show_bug.cgi?id=2077 –

Antwort

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 verwenden EventWatch es lösen können.

+1

Ich frage mich, warum es sich von 'SDL_PollEvent' unterscheidet Weg? – pergy

0

Wenn Sie auf Windows sind, haben Sie versucht, die Windows API zu verwenden?

Ich weiß, es ist keine echte Lösung, aber wenn Sie nicht eine Cross-Plattform-Anwendung machen, sollten Sie es versuchen.

Verwenden Sie HWND, um das SDL-Fenster zu finden und die Fenstergröße zurückzugeben.