При использовании SDL_SetVideoMode, есть ли способ получить внутренний указатель или идентификатор SDL_Window? - PullRequest
4 голосов
/ 04 июня 2010

Если вы создаете окно с помощью SDL_SetVideoMode (), вам возвращается поверхность, а не дескриптор окна. Есть ли способ получить дескриптор SDL_Window? Я знаю, что есть функция SDL_GetWindowFromID, но я также не уверен, как получить идентификатор, кроме функции SDL_GetWindowID, которая потребовала бы, чтобы у меня уже был дескриптор окна.

Есть предложения? Обратите внимание, что очень важно поддерживать межплатформенную переносимость, поэтому я предпочитаю использовать встроенную функциональность SDL, если это вообще возможно.

Если это поможет, я пытаюсь получить и установить положение окна и размер окна, и эти функции требуют дескриптор окна.

Спасибо!

РЕДАКТИРОВАТЬ: я должен также упомянуть, что я изменяю режимы видео по запросу пользователя, поэтому я не могу просто использовать идентификатор по умолчанию 1, так как этот идентификатор меняется каждый раз, когда я вызываю SDL_SetVideoMode ().

Ответы [ 3 ]

1 голос
/ 22 сентября 2015

У меня была та же проблема с SDL-1.2.15 для Windows, но проблема решена с помощью GetActiveWindow.

Вы можете получить дескриптор окна SDL следующим образом:

...
screen = SDL_SetVideoMode(w, h, 0, flags);
...
HWND hnd= GetActiveWindow();

Смотрите это: Функция GetActiveWindow

0 голосов
/ 14 ноября 2014

У меня была именно эта проблема - старый SDL 1.2 использует только одно окно, поэтому он сохраняет дескриптор при себе. Вот метод, который я нашел, прочитав исходный код:

Включить SDL_syswm.h , затем получить дескриптор окна, используя SDL_GetWMInfo

например. мой код для получения ручки в Windows:

SDL_SysWMinfo wmInfo;
SDL_GetWMInfo(&wmInfo);
HWND window = wmInfo.window;
0 голосов
/ 04 июня 2010

SDL_SetVideoMode возвращает поверхность на основе буфера видеокадра, а не на окне (как SDL_GetVideoSurface). Кажется, вы предполагаете, что все поверхности соответствуют окнам, но это не так.

...