gpt4 book ai didi

c++ - SDL2 如何在第二台显示器上定位窗口?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:09:46 26 4
gpt4 key购买 nike

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

更新

在 Windows 10 中更改文本大小时,使用 SDL_GetDisplayBounds 将不会返回正确的监视器位置。有什么解决办法吗?

enter image description here

最佳答案

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.hSDL_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%,然后据此更正边界。

关于c++ - SDL2 如何在第二台显示器上定位窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41745492/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com