2017-01-19 64 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。 –

相關問題