2017-01-19 63 views
3

我正在使用SDL_SetWindowPosition来定位我的窗口。我可以使用此功能将窗口放在另一台显示器上吗?SDL2如何在第二台显示器上放置窗口?

UPDATE

使用SDL_GetDisplayBounds当文本大小在Windows 10改变任何想法如何解决这个问题将不会返回正确的监视器位置?

enter image description here

回答

0

是的,你可以使用SetWindowPosition,如果你知道第二个监视器的边界。 您可以使用函数SDL_GetDisplayBounds(int displayIndex,SDL_Rect * rect)来获取它们。

3

SDL2使用全局屏幕空间坐标系统。每个显示设备在该坐标空间内都有自己的边界。下面的示例将一个窗口在第二显示设备上:

// enumerate displays 
int displays = SDL_GetNumVideoDisplays(); 
assert(displays > 1); // assume we have secondary monitor 

// get display bounds for all displays 
vector<SDL_Rect> displayBounds; 
for(int i = 0; i < displays; i++) { 
    displayBounds.push_back(SDL_Rect()); 
    SDL_GetDisplayBounds(i, &displayBounds.back()); 
} 

// window of dimensions 500 * 500 offset 100 pixels on secondary monitor 
int x = displayBounds[ 1 ].x + 100; 
int y = displayBounds[ 1 ].y + 100; 
int w = 500; 
int h = 500; 

// so now x and y are on secondary display 
SDL_Window * window = SDL_CreateWindow("title", x, y, w, h, FLAGS...); 

SDL_video.h综观SDL_WINDOWPOS_CENTERED的定义,我们把它定义为

#define SDL_WINDOWPOS_CENTERED   SDL_WINDOWPOS_CENTERED_DISPLAY(0) 

,所以我们也可以使用宏SDL_WINDOWPOS_CENTERED_DISPLAY(n)其中n是显示索引。

更新的Windows 10 - DPI缩放问题

好像确实是有与SDL2,并在Windows中更改DPI规模(即文本缩放)的错误。

这是两个与问题相关的错误报告。他们仍然显然没有得到解决。

https://bugzilla.libsdl.org/show_bug.cgi?id=3433

https://bugzilla.libsdl.org/show_bug.cgi?id=2713

潜在的解决方案

我敢肯定,OP可以使用Win32 API来确定dpi的规模,为scale != 100%,然后纠正的范围。

+0

我想评论一下原始问题来回答你的问题,但我还没有特权。我的猜测是更改Windows 10中的**文本比例**,以某种方式影响与SDL的屏幕坐标。 我有一个不同的但相关的问题,直到我想通过我的Mac的Retina显示器来使用SDL2。 (视网膜使用缩放)。 我建议您尝试以下实验:在Windows 10下输出显示范围,并检查它们是否更改,当您更改文本比例设置。 –

+0

它可能是SDL2的一个错误。您是否在Windows 10上搜索了具有相同体验的其他人? –

+0

如果我的假设是正确的,由于125%的文字比例,所有屏幕位置将乘以1.25。 –

相关问题