问题标签 [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 投票
9 回答
105899 浏览

c# - 创建 DPI 感知应用程序

我在 C# 中有一个表单应用程序。当我更改显示器的 DPI 时,所有控件都会移动。我使用了代码this.AutoScaleMode = AutoScaleMode.Dpi,但它并没有避免这个问题。

有人有想法吗?

0 投票
2 回答
3958 浏览

windows-xp - Windows XP 中的 DPI 感知应用程序

我想让我的 C# 应用程序知道 DPI。Windows API 中有一个名为 SetProcessDPIAware() 的命令,但问题是它仅适用于 Windows Vista 和更高版本的 Windows,而不适用于 XP。如何使控件、按钮和字体 DPI 感知,以便无论使用什么 Windows 版本都能正确显示?

0 投票
5 回答
53151 浏览

c# - 如何配置应用程序以在具有高 DPI 设置(例如 150%)的机器上正确运行?

我在 C# 中创建了一个简单的 Winforms 应用程序。当我在具有高 DPI 设置(例如 150%)的机器上运行应用程序时,应用程序会按比例放大。到现在为止还挺好!但不是用更大的字体大小渲染字体,所有文本也只是按比例放大。这当然会导致文本非常模糊(在按钮等所有控件上)。

Windows 不应该负责正确呈现文本吗?例如,我的应用程序的标题栏呈现清晰明了。

0 投票
1 回答
780 浏览

c++ - 如何让我的应用程序具有 DPI 感知能力?

当用户设置 DPI 缩放以在所有显示器中绘制更大的字体和窗口时,我不希望我的应用程序受到影响(我不希望我的应用程序的字体和控件变大)

我尝试使用SetProcessDPIAware() 函数或添加清单文件,但没有成功。如何防止 Windows(XP、7 和 8)更改我的应用程序的字体大小?

0 投票
2 回答
3872 浏览

wpf - 为什么 72 dpi 的图像在 96 dpi 的屏幕上显得更大

  1. 我将屏幕设置为 72 DPI,并设计了一个 100x100 @ 72 DPI 的小 png 图像。这意味着 72 像素代表 1 英寸。
  2. 现在,我将屏幕更改为 120 DPI,并设计了相同的图形 png 图像,其分辨率为 100x100 @ 120 DPI。这意味着 120 像素代表 1 英寸。
  3. 我再次将屏幕更改为 96 DPI。这意味着 96 像素代表 1 英寸。然后创建了一个 WPF 应用程序并添加了两个图像(步骤 1 和步骤 2) -我已将 Stretch Mode 设置为 None

不确定我是否正确理解了这个概念,我希望 72 dpi 的图像在 96 dpi 时看起来更小,因为如果该图像的 72 像素代表 1 英寸,那么在新配置中,96 像素代表 1 英寸。因此,我希望 72 dpi 的图像看起来更小。但事实并非如此。事实上,恰恰相反。72 dpi 的图像在 96 dpi 时看起来更大。为什么?是否像 WPF 在图像方面将始终默认为 96 dpi 一样?

在此处输入图像描述

更新 为什么即使在 120 dpi(将系统 dpi 设置为 120)下,只有 96 dpi 的图像完全适合 200x200 框? 在此处输入图像描述

0 投票
0 回答
261 浏览

delphi - DPI 意识清单

我想尝试 DPI 意识。我创建了以下清单,但出现错误:

无法创建进程:应用程序无法启动,因为它的并排配置不正确。

这是清单。我究竟做错了什么?

0 投票
1 回答
450 浏览

wpf - TransformToDevice 在 Windows 8.1 上没有返回正确的 DPI 因子

您好我正在实现 DPI 感知应用程序,我想根据当前分辨率计算窗口的位置。

我在 Windows 8.1 上测试了以下代码,如果我们更改 DPI 设置,操作系统不会要求重新登录。它立即应用 DPI。

但是如果我使用 mspanel 更改 DPI 而不注销并重新登录,则 TransformToDevice() 返回旧值而不是新值。我认为如果 DPI 设置改变,这个变换矩阵会改变。

当 DPI 设置更改时,我应该调用一种方法吗?

0 投票
1 回答
2609 浏览

inno-setup - Inno Setup WizardImageFile 在 Windows 7 上的字体缩放看起来很糟糕

Inno Setup WizardImageFile(和WizardSmallImageFile)的位图看起来很糟糕,因为当 Windows 7 启用了大系统字体时,向导比平常大,但图像缩放严重错误。

有解决办法吗?

如果我在这样的地方添加自己的图片,则没有类似的问题:

0 投票
2 回答
1522 浏览

windows - 在 Windows 8 上声明每个窗口的高 DPI 感知

我正在开发在 Cubase 等主机中运行的音频插件,并且我正在寻找添加高 DPI 支持。这是有问题的,因为我所知道的所有主机应用程序都将自己声明为非高 DPI 感知,因此所有窗口都由 DWM 自动缩放。我正在寻找一种方法来关闭插件窗口的 DWM DPI 缩放,即使主机本身不支持 DPI(因此它对所有其他窗口使用 DWM DPI 缩放)。有谁知道这是否可能?

对于使用大量插件的应用程序,例如音频主机,这是一个非常现实的问题,因为它们不能直接声明自己具有高 DPI 感知能力:这会破坏所有现有插件。因此,除非 Windows 对此提供解决方案,否则我们总是停留在 96 dpi 领域。基本上我认为我们需要一个比设置每个进程更细粒度的解决方案,以便主机和插件可以单独声明它们的感知级别。

如果目前无法做到这一点,是否可以联系 Microsoft 工程师,以便将其添加到未来版本的 Windows 中?

0 投票
1 回答
3031 浏览

c# - DPI 感知和 Rect

我遇到了一个小问题,我似乎无法找到答案。我有一个应用程序可以获取某些进程并获取它的窗口大小。唯一的问题是它占用了实际屏幕尺寸(用户看到的)的百分比。

我想制作应用程序的屏幕截图,但如果我使用窗口的 Rect,我会得到比实际更小的屏幕,因为分辨率为 125%。这意味着我输出的原始分辨率 ( 1280 * 800) 小于我的屏幕分辨率 ( 1600 * 1000) 你可以理解这个小问题使我的程序不可靠。我的问题是如何解决这个问题?

我创建了一个清单,并将其设置DPIAware为 true。我还在调试中禁用了 Visual Studio 托管。但这无济于事。我仍然得到相同的值和相同的问题。这是我实际截屏的代码片段:

这给了我一个截图1280 * 800,不足以涵盖整个过程,即1600 * 1000. 一切都关闭了,因为屏幕坐标不正确。如果我将所有内容乘以 1,25 就可以了,但这不是解决方案,因为我不知道其他 PC 上的 DPI 设置是什么。

编辑 3:

我将发布带有 RECT 的完整代码。