GetScaleFactorForMonitor value doesn#39;t match actual scale applied(GetScaleFactorForMonitor值与应用的实际比例不匹配)
问题描述
我通过互操作调用Windows8.1 Surface3平板电脑上的GetScaleFactorForMonitor()。它的响应比例系数为140。我在这台平板电脑上只有一台显示器。我将此调用的标志同时设置为最接近窗口和主显示,以查看是否有任何差异只是因为它的地狱,两者都给了140。
问题是,实际的伸缩性是150%。当我在Windows中查看显示设置时,显示为1440x2160,但本机分辨率为960x1440(这是我通过调用Screen.PrimaryScreen.Bound获得的)。
调用SystemInformation.PrimaryMonitor orSize.Height and Width时,我也得到960x1440。
我探索了另一种尝试使用GetDpiForMonitor()的方法。我的想法是,如果我得到原始的DPI,然后再得到缩放的DPI,我就可以进行百分比计算。
它在某种程度上是有效的,但我为原始DPI获得的值似乎是有效的(按比例调整的)DPI,反之亦然。对于x和y的有效DPI,我得到96,对于RAW,我得到144。我预计RAW会是一个较低的数字。以下是我的电话:
GetDpiForMonitor(MonitorFromWindow(myTextbox.TopLevelControl.Handle, MONITOR_DEFAULTTONEAREST),
MONITOR_DPI_TYPE.MDT_Effective_DPI,
out effectiveDPIx,
out effectiveDPIy);
GetDpiForMonitor(MonitorFromWindow(myTextbox.TopLevelControl.Handle, MONITOR_DEFAULTTONEAREST),
MONITOR_DPI_TYPE.MDT_Raw_DPI,
out rawDPIx,
out rawDPIy);
这是我正在使用的结构,它是MSDN上的结构的镜像。
public enum MONITOR_DPI_TYPE : int
{
MDT_Effective_DPI = 0,
MDT_Angular_DPI = 1,
MDT_Raw_DPI = 2,
MDT_Default = MDT_Effective_DPI
};
推荐答案
我现在意识到这是旧的,但值得指出的是为什么会发生这种情况。
科迪·格雷的评论是一个很好的起点。链接位于 https://blogs.technet.microsoft.com/askcore/2015/12/08/display-scaling-in-windows-10/标题"统一和扩展的伸缩系统"下确实显示Windows 10已经统一了所有API的比例。
然而,链接https://docs.microsoft.com/en-us/windows/win32/hidpi/high-dpi-desktop-application-development-on-windows(也来自Cody Gray)表明,Windows 10实际上并没有统一它,至少如果您使用的是较旧的Windows版本,则不是这样。
标题"每监视器DPI缩放支持UI框架"显示,例如Win32将仅返回1703版(创建者更新)的正确值,而如果使用Windows 1607+版,则UWP将使用统一缩放。
如果调用了GetScaleFactorForDevice(即100、140或180),Windows的早期版本将返回相同的值。
这篇关于GetScaleFactorForMonitor值与应用的实际比例不匹配的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:GetScaleFactorForMonitor值与应用的实际比例不匹配
基础教程推荐
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01
- MS Visual Studio .NET 的替代品 2022-01-01
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- 如何激活MC67中的红灯 2022-01-01
- c# Math.Sqrt 实现 2022-01-01
- 将 XML 转换为通用列表 2022-01-01
- rabbitmq 的 REST API 2022-01-01
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30