c++ - SDL2 中的多个显示

标签 c++ sdl

我正在编写一个程序来显示取决于显示器大小的动画。为了让它适用于多个显示器,我有一个 display_data 对象数组:

struct window_data
{
    SDL_Rect bounds;
    SDL_Window *window;
};

并为每个显示器初始化这些:

int numdisplays = SDL_GetNumVideoDisplays();
std::vector< window_data > screens( numdisplays );
for( int i = 0 ; i < numdisplays ; ++i )
{
    SDL_GetDisplayBounds( i, &( screens[ i ].bounds ) );
    screens[ i ].window
        = SDL_CreateWindow( "Display", screens[ i ].bounds.x,
                            screens[ i ].bounds.y, screens[ i ].bounds.w,
                            screens[ i ].bounds.h, SDL_WINDOW_FULLSCREEN );
}

只要我的鼠标光标在主显示器上,这就可以正常工作,但如果我启动程序时光标在副显示器上,它会在副显示器上绘制两个窗口,导致只有第二个窗口可见.此行为似乎仅取决于光标的位置,而不取决于我运行程序的终端窗口。

我已验证无论光标位置如何,都会找到相同的显示数字和边界,因此我对程序行为的变化感到困惑。这是 SDL2 的预期行为还是错误?在任何一种情况下,任何人都可以提出解决方法吗?

编辑:鼠标依赖项出现在带有 XFCE 的 Debian 上。我也在 Windows 上尝试过,无论鼠标位置如何,它都会在第二台显示器上输出两个窗口。

最佳答案

您可以在 SDL_CreateWindow 的位置参数中使用 SDL_WINDOWPOS_UNDEFINED_DISPLAY 宏,并结合 SDL_WINDOW_FULLSCREEN 参数。

类似于:

SDL_CreateWindow(
        "Window Name",
        SDL_WINDOWPOS_UNDEFINED_DISPLAY(display),
        SDL_WINDOWPOS_UNDEFINED_DISPLAY(display),
        0,
        0,
        SDL_WINDOW_FULLSCREEN),

这个宏没有很好的文档,但是你可以通过阅读源代码清楚地看到它是如何工作的。

关于c++ - SDL2 中的多个显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18728821/

相关文章:

c++ - 没有标准库的通用容器

c++ - Qt Creator 找不到cl.exe(VS2012)编译器

c++ - 为什么 "0f"在 C++ 中不被视为浮点文字?

c++ - 如何将类型或变量传递给此is_same函数?

c++ - 当按键仍然按下时触发 SDL_KEYUP

c++ - OpenGL 深度 Spaz 攻击

c++ - SDL2不使用纹理绘制图像

c++ - openMP 的 SIMD 构造是否需要特定类型的硬件?

opengl - 仅使用模板测试进行遮挡查询

c++ - 在 CMake 中导入静态第 3 方 (SDL2) 库