Развернуть окно SDL
-
10-07-2019 - |
Вопрос
Как мне сказать SDL, чтобы максимизировать окно приложения?
Я создаю окно с этими флагами: SDL_OPENGL | SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_RESIZABLE.
Решение
Эта функция контролируется оконным менеджером при использовании флага SDL_RESIZABLE. Чтобы смоделировать максимизацию окна с помощью SDL, вам необходимо сначала определить размер, который будет занимать окно при максимизации. Затем вам нужно вызвать SDL_SetVideoMode с таким размером после размещения окна с SDL_VIDEO_WINDOW_POS переменная среды .
Если вы действительно хотите, чтобы окно было развернуто, как если бы вы нажали кнопку «Развернуть», то вам придется напрямую обращаться к соответствующему оконному менеджеру (то есть SDL вам не поможет).
Например, функция ShowWindow может использоваться для максимизации окна с использованием Win32 API. Чтобы получить дескриптор окна, созданного SDL, используйте функцию SDL_GetWMInfo . Получающаяся структура SDL_SysWMinfo содержит поле window типа HWND. Это должно быть передано в функцию ShowWindow вместе с флагом SW_MAXIMIZE.
SDL_SysWMinfo info;
SDL_VERSION(&info.version);
SDL_GetWMInfo(&info);
ShowWindow(info.window, SW_MAXIMIZE);
Другие советы
В 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);
Все ответы кажутся устаревшими, в настоящее время просто укажите SDL_WINDOW_MAXIMIZED
в качестве флага для SDL_CreateWindow
.
window = SDL_CreateWindow(
"Foobar",
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720,
SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_MAXIMIZED
);
Существуют дополнительные переменные среды, которые можно установить для управления окном дисплея. К сожалению, в настоящее время документы sdl не работают, поэтому я не могу найти то, что вам нужно.
SDL_FULLSCREEN - это вариант, который вы ищете:
flags |= SDL_FULLSCREEN;
screen = SDL_SetVideoMode(..., flags);