C++ 使用SDL_SetVideoMode时,是否有方法获取内部SDL_窗口指针或ID?

C++ 使用SDL_SetVideoMode时,是否有方法获取内部SDL_窗口指针或ID?,c++,sdl,C++,Sdl,如果使用SDL_SetVideoMode()创建窗口,则返回的是曲面,而不是窗口句柄。有没有办法拿到SDL_窗口的把手?我知道有一个SDL_GetWindowFromID函数,但我也不知道如何获取ID,除了SDL_GetWindowID函数,它要求我已经拥有了窗口句柄 有什么建议吗?请注意,保持跨平台的可移植性非常重要,因此如果可能的话,我更喜欢使用内置的SDL功能 如果有帮助的话,我正在尝试获取和设置窗口位置和窗口大小,这些函数需要一个窗口句柄 谢谢 编辑:我还应该提到,我正在根据用户的请求更

如果使用SDL_SetVideoMode()创建窗口,则返回的是曲面,而不是窗口句柄。有没有办法拿到SDL_窗口的把手?我知道有一个SDL_GetWindowFromID函数,但我也不知道如何获取ID,除了SDL_GetWindowID函数,它要求我已经拥有了窗口句柄

有什么建议吗?请注意,保持跨平台的可移植性非常重要,因此如果可能的话,我更喜欢使用内置的SDL功能

如果有帮助的话,我正在尝试获取和设置窗口位置和窗口大小,这些函数需要一个窗口句柄

谢谢


编辑:我还应该提到,我正在根据用户的请求更改视频模式,因此我不能只使用默认ID 1,因为每次调用SDL_SetVideoMode(),该ID都会更改。

返回基于视频帧缓冲区的曲面,而不是在窗口上(就像)。您似乎假设所有曲面都对应于窗口,但事实并非如此。

我有一个确切的问题-旧的SDL 1.2只使用一个窗口,因此它将句柄保留在自己的位置。以下是我在阅读源代码时找到的方法:

包含SDL\u syswm.h然后使用
SDL\u GetWMInfo

e、 g.我在Windows中获取句柄的代码:

SDL_SysWMinfo wmInfo;
SDL_GetWMInfo(&wmInfo);
HWND window = wmInfo.window;

我在针对windows的SDL-1.2.15中遇到了同样的问题,但问题通过
GetActiveWindow
解决了

您可以像这样获得SDL窗口句柄:

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

我没有使用它返回的曲面句柄,只是检查它是否为null(检查初始化中的错误)。但SDL_SetVideoMode函数也负责创建窗口。我想得到一个指向它创建的SDL_窗口的指针。@chrensli,我想你错了——你能给我指一下SDL文档中说SetVideoMode创建窗口的地方吗?无论如何,要获得全屏窗口,为什么不使用参数为
True
(该参数的名称为
fullscreen
,默认为
False
)的
SDL\u窗口
构造函数呢“标志”列表包含两个标志(SDL_NOFRAME和SDL_Resizeable),它们似乎与创建窗口完全相关。但我也在看这个函数的源代码,它使用SDL_CreateWindow来创建一个窗口。最后我做了一些有点不对劲的事情——我在SDL_SetVideoMode函数附近添加了一个SDL_GetWindow函数,该函数返回我试图获取的窗口句柄。但这不是一件好事。我可以自己创建一个窗口,但这似乎涉及到很多内容。此外,我看到的大多数SDL/OpenGL教程都只使用SDL_SetVideoMode来创建窗口,这也是我最初倾向于这样做的原因。该函数已经为我正确地创建了一个窗口,所以我知道它至少做到了这一点。查看SDL源代码,我可以看到它将SDL_窗口句柄存储在一个静态变量中,但它似乎没有使其可供公共使用,这是一个遗憾。我不确定创建SDL_GetWindow函数是否会产生长期的负面影响。我使用的是SDL 1.3,开发分支。我选择这个分支是因为我需要SDL_SetWindowPosition,它在1.2中不存在。互联网上的大多数教程都使用SDL_SetVideoMode,但这是在1.2代码的1.3兼容层中定义的。鉴于这是一个新的发展,我应该使用新的代码。谢谢你抽出时间。我相信我所说的SDL_SetVideoMode函数创建窗口仍然是正确的,但现在这是一个没有意义的问题,因为我不再使用该函数了。