当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《SDL2如何在第二台显示器上定位窗口?》经验,为你挑选了1个好方法。

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

UPDATE

SDL_GetDisplayBounds在Windows 10中更改文本大小时,使用将不会返回正确的监视器位置.任何想法如何解决此问题?

在此输入图像描述



1> Jacques Nel..:

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_WINDOWPOS_CENTEREDSDL_video.h,我们看到它被定义为

#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%然后通过它来更正界限.

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有