Maximieren SDL Fenster
-
10-07-2019 - |
Frage
Wie soll ich sagen SDL das Anwendungsfenster zu maximieren?
Ich schaffe das Fenster mit diesen Flags: SDL_OPENGL | SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_RESIZABLE.
Lösung
Diese Funktionalität wird durch den Fenstermanager gesteuert werden, wenn Sie den SDL_RESIZABLE Flag verwenden. Um die Maximierung eines Fensters mit SDL simulieren würden Sie müssen zuerst die Größe bestimmen das Fenster einnehmen würde, wenn es maximiert. Dann würde rufen Sie SDL_SetVideoMode mit dieser Größe nach dem Fenster mit der SDL_VIDEO_WINDOW_POS Umgebungsvariable .
Wenn Sie wirklich das Fenster müssen maximiert werden, als ob Sie auf der Schaltfläche zum Maximieren geklickt, dann werden Sie die darunter liegenden Fenster-Manager direkt zugreifen müssen (das heißt SDL wird dir nicht helfen).
Zum Beispiel kann die Funktion Showwindow kann verwendet werden, um ein Fenster mit dem Win32-API zu maximieren. Um verwendet ein Handle für das Fenster erstellt von SDL die SDL_GetWMInfo Funktion. Das resultierende SDL_SysWMinfo struct enthält ein Fenster Feld Typ HWND. Dies muss zusammen mit dem SW_MAXIMIZE Flag an die Showwindow-Funktion übergeben werden.
SDL_SysWMinfo info;
SDL_VERSION(&info.version);
SDL_GetWMInfo(&info);
ShowWindow(info.window, SW_MAXIMIZE);
Andere Tipps
In SDL2.0
sdl_window = SDL_CreateWindow("title", 10, 30, window_width, window_height, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);
SDL_MaximizeWindow(sdl_window);
SDL_GetWindowSize(sdl_window, &window_width, &window_height);
sdl_gl_context = SDL_GL_CreateContext(sdl_window);
SDL_GL_MakeCurrent(sdl_window, sdl_gl_context);
Alle Antworten scheinen veraltet, heute nur SDL_WINDOW_MAXIMIZED
als Flagge für SDL_CreateWindow
angeben.
window = SDL_CreateWindow(
"Foobar",
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720,
SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_MAXIMIZED
);
Es gibt zusätzliche Umgebungsvariablen, die eingestellt werden können, das Anzeigefenster zu steuern. Leider ist die sdl docs nach unten im Moment, also kann ich nicht sehen, was Sie brauchen.
SDL_FULLSCREEN ist die Option, die Sie suchen:
flags |= SDL_FULLSCREEN;
screen = SDL_SetVideoMode(..., flags);