我正在编写一个程序来显示取决于显示器大小的动画。为了让它适用于多个显示器,我有一个 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/