问题标签 [hidpi]
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.
winforms - 如何触发 WinForms DpiChanged 事件?
(不,我还不能将此代码库升级到 .NET Core 或更高版本。)
我有一个主要是 Windows 窗体和部分 WPF 的应用程序。当字体大小在运行时发生变化时,WPF 会做出正确反应。相反,除非我重新启动,否则 Windows 窗体似乎甚至没有意识到任何改变。例如,属性Control.DeviceDpi
(直到 4.7 才引入)显示启动时准确的值,而不是当前值。
我的app.manifest
有:
我的app.config
有:
但是 4.7确实引入了一个Control.DpiChanged
事件,只是它似乎永远不会触发。
但是,如果我覆盖WndProc
并收听WM_DPICHANGED
,那确实会触发。此代码似乎表明该事件应该触发。
显然,这不是因为这段代码有条件地将其关闭。但我不确定我不符合哪个部分的资格。(我在 Windows 10 21H1 上,比 RS2 更新。)
windows - LoadCursor 和混合 DPI 多显示器
当该LoadCursor
函数用于从资源加载游标时,结果HCURSOR
可以在不同的监视器上使用,并且始终以正确的大小显示。
即:通常:
- 在 96 dpi 显示器上使用 32x32 资源,
- 在 192 dpi 显示器上使用 64x64 资源。
但是,当从内存以编程方式创建游标时(例如使用LookupIconIdFromDirectoryEx
and CreateIconFromResourceEx
),生成的游标具有固定的分辨率。这意味着它在混合 DPI 多显示器设置中的至少一台显示器上以错误的尺寸显示。
我还检查了LoadCursorFromFile
它,它也提供了这种动态分辨率行为,例如LoadCursor
.
有没有办法以编程方式创建一个游标,该游标根据显示在哪个监视器上动态切换?加载的光标以不同的方式工作在幕后发生了什么魔力LoadCursor
?
x11 - .Xresources 中 Xft.dpi 的最佳值是多少
来自Arch Wiki:
对于 Xft.dpi,使用 96 的整数倍通常效果最好,例如 192 用于 200% 缩放。
我知道 200%、300%、... 缩放是最好的,因为每个像素都替换为整数像素,而且我们没有需要显示 1.5 个像素的情况。
但是如果没有 4k 显示器,并且有例如2.5k(2560x1440) 显示器或具有一些非标准分辨率或纵横比的显示器,该怎么办。在这种情况下,将比例因子增加 2 倍太多了。
我只有两个想法:
- 将其缩放为
1.25
,1.5
, , 以便正确缩放具有和大小1.75
的对象。16x16
32x32
- 将其缩放
(vertical_pixels*horizontal_pixels)/(1920*1080)*96
,因此您将获得类似于正常显示的对象大小。
c# - 在 MFC 本机应用程序中启用 WindowsFormsHighDpiAutoResizing
启用了 CLR 支持的 MFC 应用程序 (.net framework 4.7.2) 引用了包含 WinForms 控件的 ac# 程序集。这些控件使用 Control.DeviceDpi,但在运行时此 api 始终返回 96。
使用 EnableWindowsFormsHighDpiAutoResizing 添加 MFCApplication.exe.config 可解决该问题。Control.DeviceDpi 报告准确的 dpi。
有没有办法将此 .config 嵌入到 MFCApplication.exe 中?或者这个标志可以在启动时以编程方式设置吗?在这方面有一些最佳实践吗?
c++ - wxWidgets 3.1.5 MSW - HiDPI 缩放问题导致控件大小不正确
关于我的设置的信息
- wxWidgets:3.1.5(也尝试了来自github的最新源)
- wxWidgets:在 msys2 (ucrt64) 下使用 gcc-11.2 构建
- Windows 10 应用程序:在 msys2 (ucrt64) 下使用 gcc-11.2 构建
- 监控原生分辨率:3840 x 2160
- IDE:Eclipse 2021-09
我的问题
如果我构建我的应用程序并链接到一个没有使用 HiDPI 感知清单的资源文件,那么一切正常,但是正如人们所期望的那样,字体是像素化的。但是,一旦我与 HiDPI 感知资源文件链接,则控件的大小不会与其关联的文本成比例地调整。请参阅以下屏幕截图。
上图显示了在没有 HiDPI 感知资源文件的情况下渲染的测试 wxFrame。监视器缩放比例为 200%。如您所见,wxFrame 已正确渲染。
上图显示了在没有 HiDPI 感知资源文件的情况下渲染的测试 wxFrame。监视器缩放比例为 350%。如您所见,(除了模糊的文本)wxFrame 已正确渲染。
上图显示了使用HiDPI 感知资源文件渲染的测试 wxFrame。监视器缩放比例为 200%。如您所见,wxFrame 渲染得很糟糕。这个 wxFrame 以 100% 的比例正确渲染。
这是一个最小的功能齐全的代码示例来演示我的问题。
对 SetMinSize() 和 SetMaxSize() 的调用对我的整体 UI 设计至关重要。
我使用以下内容构建了 wxWidgets 资源文件:
windres --use-temp-file -ires.rc -ores.o -I/home/user/resource -DwxUSE_DPI_AWARE_MANIFEST=2
然后,我在构建应用程序时将生成的目标文件传递给链接器。
重要的是要补充一点,我的应用程序可以在 wxWidgets/GTK3 (Linux) 和 wxWidgets macOS/Cocoa 上正确呈现。也就是说,它可以在 macOS 和 Linux 上以任何比例值正常工作(没有像素化字体)。
当我在 Windows 10 上使用 HiDPI 感知资源文件时,是否有人知道为什么我的应用程序无法正确呈现?