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值与应用的实际比例不匹配
- 如何用自己压缩一个 IEnumerable 2022-01-01
- C# 中多线程网络服务器的模式 2022-01-01
- 良好实践:如何重用 .csproj 和 .sln 文件来为 CI 创建 2022-01-01
- 在哪里可以找到使用中的C#/XML文档注释的好例子? 2022-01-01
- 带有服务/守护程序应用程序的 Microsoft Graph CSharp SDK 和 OneDrive for Business - 配额方面返回 null 2022-01-01
- WebMatrix WebSecurity PasswordSalt 2022-01-01
- C#MongoDB使用Builders查找派生对象 2022-09-04
- Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式 2022-01-01
- 输入按键事件处理程序 2022-01-01
- MoreLinq maxBy vs LINQ max + where 2022-01-01