问题标签 [dpi-aware]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
42 浏览

dpi - 无法使应用 DPI 感知 - 这不是重复的

我无法让我的应用程序感知 DPI。在 app.manifest 我未注释:

在 App.config 我添加:

我正在关注 使 vb.net 应用程序 DPI 感知https://www.telerik.com/blogs/winforms-scaling-at-large-dpi-settings-is-it-even-possible-中的问题和回答

我的应用程序有一个带有单个用户控件的表单。在每次我尝试使用 AutoScaleMode 运行应用程序到各种设置:无、Dpi、字体、继承(它们默认为字体)。我在笔记本电脑上使用的是原厂原装显示器。

在每种情况下,e.graphics.dpix 和 e.graphics.dpiy(其中 e 是 PaintEventArgs)都是 96.0。它应该是 128.0 = 1920 像素 / 15 英寸和 128.0 = 1080 / 8.4375 英寸。

我错过了什么?

0 投票
1 回答
231 浏览

c# - 在不重新启动应用程序的情况下处理主要 DPI 的更改

我有一个 WPF 项目,它根据 APP 的某些元素的位置在不同的应用程序“APP”上绘制窗口(如弹出窗口)。
这些窗口的位置是根据系统 DPI(又名主显示器的 DPI)计算的。
当我在显示设置中更改主 DPI 时,窗口的位置是使用“旧”主 DPI 计算的,这会导致位置错误。
是否有某种方法可以执行这些取决于主 DPI 的计算,使用“新”主 DPI 而不是旧的?

我知道在更改主要 DPI 时,Windows 会提醒我“某些应用程序在您关闭并重新打开它们之前不会响应缩放更改。”,但我需要找到解决方法。

谢谢

0 投票
1 回答
132 浏览

c# - 通过 WPF 应用程序启动时,Winform 窗口会缩小

我已经创建了 WPF 应用程序。在这个应用程序中

  1. 我正在启动win form exe。
  2. 稍后将 WPF 窗口作为此 win 表单的父级。
  3. 当我以当前分辨率执行此应用程序时。一切正常

但是当我通过 4K Monitor(3840 * 2100) 启动相同的东西时,表单大小会减小。

我尝试了以下事情。

  1. 将 win 窗体大小设置为窗口。最大化。
  2. 创建 WPF 清单并取消注释 DPIaware 以使 WPF 应用程序 DPIaware。
  3. 操纵父窗口的大小。

任何帮助或建议都会有所帮助。(仅供参考:当我尝试从 WinForms 启动相同的 exe 时,我没有看到这个问题)。

代码片段

0 投票
0 回答
156 浏览

delphi - 服务应用程序中的 DpiAware

我有一个在 NT AUTHORITY\SYSTEM account 上执行 Delphi 应用程序的 C++ 服务。下面的清单文件已正确嵌入到 Delphi 应用程序中,但应用程序仍然无法识别 dpi,例如,当以 125% DPI 截屏时,捕获不考虑完整桌面。已经将 Delphi 应用程序作为普通应用程序执行,一切正常。

如何使 Delphi 应用程序(由 C++ 服务执行)dpiaware?


0 投票
0 回答
181 浏览

.net - WinForms 中的 Per-Monitor V2 DPI 感知不使用非环境字体重新缩放控件

我的任务是为针对 .NET 4.7.2 的旧版 WinForms 应用程序添加对 Per-Monitor V2 DPI 感知的支持。我知道这是一个复杂的问题,我在 StackOverflow 和 MSDN 上阅读了很多关于这个主题的内容。使用测试项目,我已经掌握了基础知识。测试应用程序会随着 DPI 的变化而重新调整。

这是我的问题:旧版软件在每个表单上都包含许多自定义字体(不同的样式和大小),当 DPI 在运行时发生变化时,我无法让这些字体重新缩放。看来我可以在表单上设置我喜欢的任何字体,如果我AutoScaleMode.Dpi在表单上使用它会正确重新缩放。但是,一旦我在子控件上设置了自定义字体,就不会对该控件应用重新缩放。随着 DPI 的变化,大小保持不变。如果 DPI 不变,这不是问题。仅当在具有不同 DPI 设置的监视器之间移动或在运行时更改监视器的 DPI 设置时才会出现此问题。(注:所有字体更改发生在设计器中)

这是一个例子:

显示器 1 - 96 DPI

显示器 1 - 96 DPI

显示器 2 - 144 DPI

显示器 2 - 144 DPI

您可以看到它checkBox3是粗体并且在 96 DPI 时正确缩放。但是,当我将应用程序拖到监视器 2 时,checkbox3它仍然未缩放,因此现在它比其他文本小。

重新缩放的损失对我来说确实有点意义,因为在子控件上设置自定义字体会破坏环境字体关系。根据我的测试,当 DPI 发生变化时,表单实际上会获得具有新 DPI 缩放点大小的新字体。没有更新不使用该字体的控件是有道理的。但是有没有办法要求所有控件重新调整自己的比例?

我一直试图在上述测试项目(C# .NET 4.7.2)中解决这个问题。我发现重新调整自定义字体的唯一方法是在 DPI 更改时使用 DPI 更改事件手动重新创建自定义字体。

显示器 2 - 144 DPI(手动调整字体大小)

显示器 2 - 144 DPI(手动调整字体大小)

所以这似乎确实有效。当然,还有更好的方法。我在这里想念什么?

0 投票
0 回答
60 浏览

vb.net - 使 VB.NET 应用程序 DPI 感知 (Visual Studio 2012)

我正在尝试使用 控件从控件制作图像文件CopyFromScreen,除非我将比例设置为 100%,否则它会失败。使用较大的比例,图像逐渐向左和向上偏移,窗口在屏幕上越向右和向下。(不幸的是我的眼睛在 100% 挣扎)

我最初尝试使用DrawToBitmap但失败了,因为控件中有一个富文本框,并且有记录表明它不会绘制。

我已经阅读了该论坛上的文章并遵循了将dpiAware设置包含在清单中的建议,但这没有效果。我不是专家,我想知道是不是因为我只有 VS 2012 而我的清单声明以开头asmv1而不是asmv3我不得不修改示例代码?

欢迎提出任何建议。

0 投票
0 回答
123 浏览

c# - C# Winforms AutoScaleMode DPI 和工具栏按钮

为了其他功能,我的 WinForms (C# .NET 4.6) 应用程序需要 AutoScaleMode = Dpi。这对我 99% 的客户都很有效。他们通常使用 100%、125% 甚至 %150 的 Windows 显示缩放。

但是,我有一个客户安装的屏幕为 3840x2160,缩放比例为 250%。在那个系统上,我的工具栏按钮变得非常奇怪,如下所示:

在此处输入图像描述

工具栏按钮的高度似乎随着系统缩放而增加,但它们的宽度并没有增加。这会导致带有微小按钮图像的扭曲视图。如何强制工具栏按钮在两个方向上缩放并让按钮图像相应地缩放?

0 投票
0 回答
440 浏览

uwp - 如何将 DPI 感知添加到我的 Visual Studio 项目?

在我准备将我的应用程序提交到 Microsoft Store(我的应用程序“通过警告”)时获得的 ValidationResult 中,我在报告的“高 DPI 支持”部分下得到了这个“警告”:

在此处输入图像描述

我绝对不希望用户遇到 UI 元素缩放不正确、文本被剪裁或图像模糊的情况,因此我想在应用清单中将我的应用声明为 DPI 感知。但只是在哪里以及如何?

我找到了这个,并且条目显然应该是这样的:

最特别(我认为)这一行是关键:

...但我不知道我应该如何添加它(如果它是一个半自动化的过程),或者将它添加到哪个文件。我搜索了“<assembly xmlns”,但没有找到。

我不想“挥霍”并破坏某些东西,或者让事情变得更糟,所以我想知道如何将这种 DPI 感知添加到我的应用程序中。我的解决方案有一个 Package.appxmanifest 文件,但它作为一组 GUI 选项卡打开(在这些选项卡上我没有看到任何关于 DPI 的信息)和 Package.StoreAssociation.xml,但我不知道我应该把这些放在哪里一个 DPI-Awareness 声明(如果这甚至是添加它的适当文件)。

更新

所以我现在有这个:

...在主项目(不是包项目)的 app.manifest 文件中,但我仍然收到相同的警告。

更新 2

根据 CoCalceDew 提供的评论和参考资料,我将清单更改为:

...但是必须等到我的项目再次编译(请参阅以了解问题所在),然后再查看它是否可以解决问题。

0 投票
0 回答
277 浏览

windows - 如何使电子应用程序响应 DPI 缩放?

我知道大多数遗留的 Windows 应用程序不会自动响应在提到的DPI 缩放

https://docs.microsoft.com/en-us/windows/win32/hidpi/high-dpi-desktop-application-development-on-windows

如何使电子应用程序响应 DPI 缩放?目前我的电子应用程序的布局被改变显示比例破坏了。

0 投票
0 回答
69 浏览

windows - 如何设置通过 DllSurrogate 加载的 COM 类的 DPI 感知

为了让我的小应用程序能够正确扩展(在 Windows 8.1 上),我已经尝试了每个清单示例。这是我最近的尝试,例如:

绝对没有任何效果。所以我想知道是否还有其他事情需要做。我的应用程序是一个 COM Dll,它通过 DllSurrogate 加载到进程外。是否应该添加其他东西(可能是命令行标志或其他东西)以提高意识?实际上,调用SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE)确实有效,但文档不鼓励使用 API 调用来代替清单方法。感谢您的任何帮助!