我正在使用SDL_SetWindowPosition
來定位我的窗口。我可以使用此功能將窗口放在另一臺顯示器上嗎?SDL2如何在第二臺顯示器上放置窗口?
UPDATE
使用SDL_GetDisplayBounds
當文本大小在Windows 10改變任何想法如何解決這個問題將不會返回正確的監視器位置?
我正在使用SDL_SetWindowPosition
來定位我的窗口。我可以使用此功能將窗口放在另一臺顯示器上嗎?SDL2如何在第二臺顯示器上放置窗口?
UPDATE
使用SDL_GetDisplayBounds
當文本大小在Windows 10改變任何想法如何解決這個問題將不會返回正確的監視器位置?
是的,你可以使用SetWindowPosition,如果你知道第二個監視器的邊界。 您可以使用函數SDL_GetDisplayBounds(int displayIndex,SDL_Rect * rect)來獲取它們。
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%
,然後糾正的範圍。
我想評論一下原始問題來回答你的問題,但我還沒有特權。我的猜測是更改Windows 10中的**文本比例**,以某種方式影響與SDL的屏幕座標。 我有一個不同的但相關的問題,直到我想通過我的Mac的Retina顯示器來使用SDL2。 (視網膜使用縮放)。 我建議您嘗試以下實驗:在Windows 10下輸出顯示範圍,並檢查它們是否更改,當您更改文本比例設置。 –
它可能是SDL2的一個錯誤。您是否在Windows 10上搜索了具有相同體驗的其他人? –
如果我的假設是正確的,由於125%的文字比例,所有屏幕位置將乘以1.25。 –