2015-08-30 11 views
9

Korzystam z poniższej struktury, aby uzyskać nową szerokość i wysokość okna SDL o zmienionym rozmiarze. Ale dzięki tej strukturze mogę uzyskać nowe dane dopiero po zakończeniu zmiany rozmiaru, kiedy kończę przeciąganie i zwalnianie przycisku myszy. Jak mogę uzyskać nowe dane w sposób ciągły, czyli podczas przeciągania okna.Uzyskiwanie Contiunous Zmiana rozmiaru okna zdarzenia w 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

Spróbuj ['SDL_WINDOWEVENT_SIZE_CHANGED'] (https://wiki.libsdl.org/SDL_WindowEventID) – Drop

+3

SDL_WINDOWEVENT_SIZE_CHANGED NIE jest udokumentowane jako zapewniające ciągłe aktualizacje rozmiaru. I eksperymentalnie (na Mac OS X) nie. Chciałbym również wiedzieć, jak uzyskać ciągłe zmiany rozmiaru zdarzeń podczas gestu użytkownika! https://wiki.libsdl.org/SDL_WindowEventID –

+3

Jest to niemożliwe z powodu tego błędu: https://bugzilla.libsdl.org/show_bug.cgi?id=2077 –

Odpowiedz

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); 
    ... 
} 

użyć SDL EventWatch można go rozwiązać.

+1

Zastanawiam się, dlaczego różni się od 'SDL_PollEvent' droga? – pergy

0

Jeśli jesteś w systemie Windows, czy próbowałeś używać api Windows?

Wiem, że to nie jest prawdziwa poprawka, ale jeśli nie tworzysz aplikacji na różne platformy, powinieneś ją zrobić.

Użyj HWND, aby znaleźć okno SDL i zwróć rozmiar okna.

Powiązane problemy