【发布时间】:2018-08-09 13:36:01
【问题描述】:
我遇到了一些应用程序(主要是仪表板)的问题,一些用户使用窗口显示缩放来使他们的图标变大,但这会给我的软件带来很大的问题。我正在寻找一种方法来完全禁用我的应用程序的缩放,并将应用程序缩放到显示分辨率的像素。
我找到了this thread,但它已有 8 年历史,当时还不存在 Windows 10,另一个用户给出了答案,但它也不起作用。
该行为的一个简单示例主要发生在仪表板上,因为此类屏幕上有很多控件和小部件,它们对于机器人机械控制器之类的东西至关重要。
一个示例仪表板窗口的最小可能大小为1900 x 980(在两个方向上可能小 4-5 像素,但我们四舍五入以获得四舍五入的位置 XY 值)。这个分辨率只差于1920 x 1080。它不能更小,但如果你有更大的屏幕,比如4K,你可以把它做得更大,你所获得的只是树视图中的更多日期,在 3d 引擎渲染器中更好地显示等。
因此,有些用户的笔记本电脑屏幕很小,例如 15 英寸,最大分辨率为 1920 x 1080 分辨率,但他们使用 150% 缩放,因此我的屏幕最小尺寸在他们的屏幕中变为 2850 x 1470,这使得应用程序比屏幕更大并走出屏幕。
另一个例子,如果我使用的 Windows Surface Pro 的2736 x 1824 分辨率比1920 x 1080 大约大 80%,则窗口确实仍然采用屏幕上的原始1900 x 980 像素,这使它看起来很小,所以如果你全屏显示,你会在所有控件中看到更多信息。但是,如果您将缩放比例更改为 150%,则屏幕现在再次占用屏幕上的2850 x 1470 像素,这与高度完美匹配,但在宽度上我短了 100 像素,而 100 像素足以松动右侧的部分我的屏幕,您要么看不到屏幕的最左侧,要么看不到屏幕的最右侧。
我尝试了 3 种自动缩放模式:DPI、字体和无,但它根本不起作用。无论如何,它仍然会拉伸屏幕。更改表单的字体也无济于事,我设法让它直接在表单中为少数标签工作,但组框内的任何内容都无法更改或与其余部分相比大小增加两倍。
要点:
- 项目是 .net
4.5和4.6但如果我需要特定功能,在4.7中编译它们没有问题。 - WPF 是不可能的。我们花了 3 年时间来实施它,但很快就以第三方 DLL 的性能非常糟糕而告终,而且 3D Cad 的性能简直糟糕透顶。
- 屏幕已经用尽可能少的控件进行了优化。在数百个屏幕和数千个用户控件中,其中大约一半非常接近
1920 x 1080的限制,这大约是我们客户的 90% - 我收到了一个建议,即在客户端计算机上运行不受主机影响的 100% 缩放的虚拟机。这可能是我最后的选择,因为通过 VM 处理专用显卡非常困难,尤其是 Quadro 和 FireGL 等 CAD 卡。
- 一半的用户使用触摸屏,我们尝试将所有内容都放在一个带有 2 个滚动条的面板中,天哪,这太糟糕了,而且只能在蓝月亮中运行一次。所以它只对鼠标用户有好处,这些用户都有桌面 AFAIK,所以 99% 的用户不使用缩放,所以他们没有这个问题。
那么现在有什么可以解决或解决这个问题的吗?
【问题讨论】:
-
你可能不想听到这个,但我认为一个不尊重我的操作系统配置缩放的应用程序是反社会的,以至于我会寻找替代方案。许多人使用此设置是因为他们的眼睛无法处理较小尺寸的东西。靠在屏幕上辨别小东西会导致长期的背部问题。不要忽视用户的需求。
-
但是,您的 app.manifest 中有
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</dpiAware>吗? From the same "author"。 Some notes I've written. -
您说没有 WPF,但您遇到了扩展问题,没有什么比这更符合要求了。 WinForms 不适合做人。结果充其量是笨拙的。
-
GUI 窗口应该可以轻松调整大小,缩小到合理的最小大小。先解决这个问题,你也会解决这个问题。如果您以前拥有可预测的显示器尺寸和分辨率,那么说起来容易做起来难,那么您就一直在借来的时间生活。是的,已经结束了,不会再回来了。
-
@Jimi 您的额外注释部分非常完美。您是唯一指定每个操作系统版本的人,它也适用于 Windows 10。即使表单标题使用了额外的像素,因为它仍然可以缩放到足以使窗口的高度仍然完美契合。