参照demo写完右键菜单,发现菜单位置与鼠标隔着一定的距离。因为很久以前在使用VB开发屏幕取色器时碰到过类似的问题,我猜测是win10屏幕缩放的问题(用win7系统的时候没碰到过这样的问题)。
桌面右键,选择“显示设置”,发现当前的缩放比例是125%,于是把坐标乘以125%,右键菜单位置正常。
之后尝试使用JAVA调用windows API去获取缩放比例,折腾了一阵,发现获取的屏幕DPI值是120,和我想要的125有点差距。(DPI是什么?自行百度)
由于对DPI的概念不熟,一直以为DPI就是屏幕缩放比例。后来偶然在百度上看到,不同的DPI对应不同的屏幕缩放比例,豁然开朗。
DPI is how scaling setting is implemented. Their relationship is:(dpi是如何实现缩放设置的。他们的关系如下:)
96 DPI = 100% scaling
120 DPI = 125% scaling
144 DPI = 150% scaling
192 DPI = 200% scaling
知道了这些,一切都好办了,不需要调用windows api,Java自带获取DPI的方法。
int dpi=Toolkit.getDefaultToolkit().getScreenResolution();
int scaling=100;
switch(dpi) {
case 120:
scaling=125;
break;
case 144:
scaling=150;
break;
case 192:
scaling=200;
break;
}
再用得到屏幕坐标乘以scaling除以100,使右键菜单在不同缩放比例的电脑上位置不偏移。