SDL_video.h
Enumerado SDL_WindowEventID
Un enumerado de eventos de ventana.
typedef enum
{
SDL_WINDOWEVENT_NONE, /**< Never used */
SDL_WINDOWEVENT_SHOWN, /**< Window has been shown */
SDL_WINDOWEVENT_HIDDEN, /**< Window has been hidden */
SDL_WINDOWEVENT_EXPOSED, /**< Window has been exposed and should be
redrawn */
SDL_WINDOWEVENT_MOVED, /**< Window has been moved to data1, data2
*/
SDL_WINDOWEVENT_RESIZED, /**< Window has been resized to data1xdata2 */
SDL_WINDOWEVENT_SIZE_CHANGED, /**< The window size has changed, either as
a result of an API call or through the
system or user changing the window size. */
SDL_WINDOWEVENT_MINIMIZED, /**< Window has been minimized */
SDL_WINDOWEVENT_MAXIMIZED, /**< Window has been maximized */
SDL_WINDOWEVENT_RESTORED, /**< Window has been restored to normal size
and position */
SDL_WINDOWEVENT_ENTER, /**< Window has gained mouse focus */
SDL_WINDOWEVENT_LEAVE, /**< Window has lost mouse focus */
SDL_WINDOWEVENT_FOCUS_GAINED, /**< Window has gained keyboard focus */
SDL_WINDOWEVENT_FOCUS_LOST, /**< Window has lost keyboard focus */
SDL_WINDOWEVENT_CLOSE, /**< The window manager requests that the window be closed */
SDL_WINDOWEVENT_TAKE_FOCUS, /**< Window is being offered a focus (should SetWindowInputFocus() on itself or a subwindow, or ignore) */
SDL_WINDOWEVENT_HIT_TEST, /**< Window had a hit test that wasn't SDL_HITTEST_NORMAL. */
SDL_WINDOWEVENT_ICCPROF_CHANGED,/**< The ICC profile of the window's display has changed. */
SDL_WINDOWEVENT_DISPLAY_CHANGED /**< Window has been moved to display data1. */
} SDL_WindowEventID;
Valores
| Bandera | Significado |
|---|---|
| SDL_WINDOWEVENT_NONE | No usado. |
| SDL_WINDOWEVENT_SHOWN | Se ha mostrado la ventana. |
| SDL_WINDOWEVENT_HIDDEN | La ventana se ha ocultado. |
| SDL_WINDOWEVENT_EXPOSED | la ventana ha sido expuesta y debe ser redibujada. |
| SDL_WINDOWEVENT_MOVED | La ventana se ha movido a data1, data2. |
| SDL_WINDOWEVENT_RESIZED | La ventana ha sido redimensionada a data1xdata2; este evento siempre es precedido por SDL_WINDOWEVENT_SIZE_CHANGED. |
| SDL_WINDOWEVENT_SIZE_CHANGED | El tamaño de la ventana ha cambiado, ya sea como resultado de una llamada a la API o a través del sistema o el usuario cambiando el tamaño de la ventana; este evento es seguido por SDL_WINDOWEVENT_RESIZED si el tamaño fue cambiado por un evento externo, es decir, el usuario o el gestor de ventanas. |
| SDL_WINDOWEVENT_MINIMIZED | La ventana ha sido minimizada. |
| SDL_WINDOWEVENT_MAXIMIZED | La ventana se ha maximizado. |
| SDL_WINDOWEVENT_RESTORED | La ventana ha sido restaurada a su tamaño y posición normales. |
| SDL_WINDOWEVENT_ENTER | La ventana ha obtenido el foco del ratón. |
| SDL_WINDOWEVENT_LEAVE | La ventana ha perdido el foco del ratón. |
| SDL_WINDOWEVENT_FOCUS_GAINED | La ventana ha obtenido el foco del teclado. |
| SDL_WINDOWEVENT_FOCUS_LOST | La ventana ha perdido el foco del teclado. |
| SDL_WINDOWEVENT_CLOSE | El gestor de ventanas solicita que se cierre la ventana. |
| SDL_WINDOWEVENT_TAKE_FOCUS | A la ventana se le ofrece un foco (debe SDL_SetWindowInputFocus() sobre sí misma o una subventana, o ignorar) (>= SDL 2.0.5). |
| SDL_WINDOWEVENT_HIT_TEST | La ventana tuvo una prueba de impacto que no fue SDL_HITTEST_NORMAL (>= SDL 2.0.5). |
| SDL_WINDOWEVENT_ICCPROF_CHANGED | El perfil ICC de la pantalla de la ventana ha cambiado (>= SDL 2.0.18). |
| SDL_WINDOWEVENT_DISPLAY_CHANGED | La ventana se ha movido a la visualización data1 (>= SDL 2.0.18). |
Ejemplo
#include <stdlib.h>
#include "SDL.h"
int main(int argc, char *argv[]) {
int width = 640;
int height = 480;
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
return 1;
}
atexit(SDL_Quit);
SDL_Window* window = SDL_CreateWindow(
"Example", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
width, height, SDL_WINDOW_RESIZABLE
);
Uint32 windowID = SDL_GetWindowID(window);
while (1) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_WINDOWEVENT: {
if (event.window.windowID == windowID) {
switch (event.window.event) {
case SDL_WINDOWEVENT_SIZE_CHANGED: {
width = event.window.data1;
height = event.window.data2;
break;
}
case SDL_WINDOWEVENT_CLOSE: {
event.type = SDL_QUIT;
SDL_PushEvent(&event);
break;
}
}
}
break;
}
case SDL_QUIT: {
return 0;
}
/* ... */
}
}
/* ... */
SDL_Delay(1);
}
}