2008-11-22 4 views
7

Wie soll ich SDL mitteilen, das Anwendungsfenster zu maximieren?SDL-Fenster maximieren

Ich erstelle das Fenster mit diesen Flags: SDL_OPENGL | SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_RESIZABLE.

+0

Muss diese Lösung tragbar sein, oder würde eine Win32- oder X11-Lösung ausreichen? –

+0

Win 32 Shuld genug, Linux-Unterstützung wäre aber willkommen. –

+0

OK, ich habe meiner Antwort ein Code-Snippet hinzugefügt, das zeigt, wie Sie Ihr SDL-Fenster mit der Win32-API maximieren können. Es ist noch nicht getestet ... –

Antwort

6

Diese Funktion wird durch den Fenstermanager gesteuert wird, wenn Sie die SDL_RESIZABLE Flag verwenden. Um das Maximieren eines Fensters mit SDL zu simulieren, müssten Sie zuerst die Größe bestimmen, die das Fenster belegen würde, wenn es maximiert wird. Dann würden Sie SDL_SetVideoMode mit dieser Größe anrufen, nachdem Sie das Fenster mit der SDL_VIDEO_WINDOW_POS environment variable platziert haben.

Wenn das Fenster maximiert werden soll, so als ob Sie auf die Schaltfläche zum Maximieren geklickt hätten, dann müssen Sie direkt auf den zugrunde liegenden Fenstermanager zugreifen (d. H. SDL hilft Ihnen nicht). Die ShowWindow-Funktion kann beispielsweise zum Maximieren eines Fensters mit der Win32-API verwendet werden. Um ein Handle zu dem von SDL erstellten Fenster zu erhalten, verwenden Sie die SDL_GetWMInfo-Funktion. Die resultierende Struktur SDL_SysWMinfo enthält ein Fenster Feld des Typs 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); 
+1

Dies ist nur eine simulation, nicht die reale Sache. Das real maximierte Fenster hat keinen linken und rechten Rand und das "Minimieren" -Symbol anstelle des "Maximieren" -Symbols in der Kopfzeile. –

-1

Es gibt zusätzliche Umgebungsvariablen, die zur Steuerung des Anzeigefensters eingestellt werden können. Leider sind die SDL-Dokumente im Moment nicht verfügbar, also kann ich nicht nachsehen, was Sie brauchen.

+0

Souds vielversprechend, aber ich konnte nichts dergleichen in der Dokumentation finden. –

+0

Ich habe mir das env angeschaut. Variablen noch einmal, und es gibt keine Auswirkungen auf den Status des Fensters, nur die Position. –

-2

SDL_FULLSCREEN ist die Option, die Sie suchen:

flags |= SDL_FULLSCREEN; 
screen = SDL_SetVideoMode(..., flags); 
+0

Ich bin auf der Suche nach einem Weg, wie das Fenster zu maximieren, nicht im Vollbildmodus. –

+0

Entschuldigung, mein Schlechter - das wird mich lehren, an diesen Problemen zu arbeiten, wenn ich halb im Schlaf bin! Ich werde versuchen, eine Lösung zu finden, die * heute * den Bildschirm maximiert. – MattyT

6

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); 
0

Alle Antworten scheinen veraltet, heute nur SDL_WINDOW_MAXIMIZED als Flagge für SDL_CreateWindow angeben.

window = SDL_CreateWindow(
    "Wrong/Fucked&Overrated", 
    SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720, 
    SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_MAXIMIZED 
);