【发布时间】:2014-03-27 05:56:37
【问题描述】:
此代码试图为用户监视器大小计算出最佳窗口大小。为此,我试图检测用户监视器的纵横比。
我使用的这种方法适用于 4:3、16:9、16:10 分辨率,但它对于 21:9 分辨率失败(进入默认情况),因为2560 * 21 != 1920 * 9。如何正确检测宽屏幕纵横比的纵横比?
dm.w和dm.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;
}
【问题讨论】:
-
您确实知道还有更多可能的解决方案吗?例如 1280x800 怎么样?还是非常常见的 1920x1080?还是(不幸的是不常见的)1920x1200?或者更高分辨率的现代 27 或 30(或更大)英寸显示器怎么样?
-
你的意思是这些分辨率不会被正确检测到吗?
-
您不应该使用纵横比来检测分辨率。相反,每个操作系统已经具有获取实际分辨率的功能,以及所有支持的分辨率。如果你真的想要宽高比,一旦你有了分辨率就很容易计算出来。
-
对于 Windows,您可能想了解
EnumDisplaySettings。 -
我没有尝试使用纵横比来检测分辨率。我正在尝试检测纵横比,以便为我的窗口选择最佳尺寸。我只想支持几种不同的窗口大小,这样我的游戏中的 2d 图形就不会在我不支持的分辨率下被拉伸。
标签: c aspect-ratio