这段代码试图为用户的显示器尺寸确定最佳的窗口尺寸。为此,我试图检测用户监视器的宽高比。

我使用的此方法适用于4:3、16:9、16:10分辨率,但是由于2560 * 21 != 1920 * 9,它对于21:9分辨率失败(进入默认情况)。如何在宽屏宽高比上正确检测宽高比?

dm.wdm.h是当前分辨率的宽度和高度

if( dm.h * 4 == dm.w * 3 ) { // 4:3
    screen_width = 1024;
    screen_height = 768;
} else if( dm.h * 16 == dm.w * 9 ) { // 16:9
    screen_width = 1366;
    screen_height = 768;
} else if( dm.h * 16 == dm.w * 10 ) { // 16:10
    screen_width = 1440;
    screen_height = 900;
} else if( dm.h * 21 == dm.w * 9 ) { // 21:9
    screen_width = 1920;
    screen_height = 720;
} else {
    Printf( "Unknown aspect ratio. Defaulting to 1024x768\n" );
    screen_width = 1024;
    screen_height = 768;
}

最佳答案

当前分辨率的宽度和高度不会告诉您显示器的纵横比。例如,3个大小不同(例如4:3、16:10和16:12)的监视器都可以使用1024 * 768。

要获得实际的宽高比,您需要显示器本身的信息。大多数显示器都支持EDID(扩展显示标识数据),其中包括显示器的活动显示区域的宽度和高度(以毫米为单位)。

当然,您不希望从原始EDID数据本身中提取此信息-您需要提供最初从EDID获得的信息的API和/或库。我不知道您使用的是哪个操作系统;但如果有可用的库和/或API,也不会感到惊讶。如果类似多台显示器的事情使您复杂化,也不要感到惊讶(例如,我正在使用两台大小不同的显示器)。

关于c - 检测宽屏宽高比,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22006939/

10-11 18:56