具有相同分辨率的不同PC上的不同字体大小

时间:2014-10-25 09:55:50

标签: c# winforms

我创建了一个WinForm桌面应用程序。

我已将它安装在2台不同的客户端PC上。

在1台PC上,字幕与其控件相符。 另一方面,标签没有正确调整大小。

我去检查每台客户端PC上的分辨率是否存在差异,但分辨率为1920x1080它不适合,而且它的分辨率为1680x1050。

为了让我的开发PC更加奇怪,分辨率为1920x1080,是的,标签确实合适。

表格和标签上的自动调整大小是真实的'。

我错过了什么?

Clients PC at 1920x1080

My Development PC

1 个答案:

答案 0 :(得分:4)

  

另一方面,标签没有正确调整大小

不,这是完全相反。它确实调整了适当的大小,为文本留下了足够的空间。问题是,文字太宽了。

这里有不止一个问题。起点是另一台机器在不同的DPI设置下运行。每英寸点数,它决定了10个点的字体大小如何映射到屏幕上的像素。你有一个漂亮的显示器,1920 x 1080像素的高分辨率。为了保持文本可读性,您需要10个点才能获得更多像素。所以你增加了DPI设置。在以后的Windows版本中很容易做到,你可能会将滑块移到125%。有效DPI为每英寸120点。

然而,您的程序在较旧的计算机上运行,​​仍然具有旧设置(100%= 96 dpi)。这往往会导致事故,你避免了最常见的事情,因为这种形式适当地重新调整了自己。它缩小了自己以匹配较低的DPI设置。布局仍然正确,标签和文本框的大小和位置正确。

但你可以看到位图发生的事故,现在它太大了太合适了。这里不是最令人讨厌的副作用。否则不容易修复,看到整个位图也必须缩小,这会导致它变得模糊并丢失细节。唯一完全干净的修复方法是使用两个位图,每个位图都绘制成与目标机器的dpi相匹配。 Unfun,经常跳过。

转到您所抱怨的问题,在不同dpi设置下进行文字渲染也是一个问题。问题在于文本的 height 非常好,但 width 却没有。技术术语是文本呈现不是与分辨率无关的。主要问题是像素网格拟合,这种技术用于在低显示器分辨率下使文本更具可读性。在TrueType提示的帮助下,字母的形状被拉伸,使得字符的字符串完全落在监视器像素上。这大大提高了可读性,但当然副作用是文本在这种低分辨率显示器上会更宽。

但你的文字太多了,需要另外的解释。这里最可能的不幸是你使用了旧机器上没有的字体。操作系统现在必须回退到替代字体,它与原始字体的间距非常不同。我无法看到您的代码,但我粗略地猜测了从Segoe到Microsoft Sans Serif的映射。

这些问题没有简单的解决方案,这只是你需要注意的事情。一个基本的准则是,扩展几乎不是一个问题,缩小比较麻烦。因此,除了当然不方便之外,以96 dpi运行你的开发机器通常是一个好主意。需要在较旧的操作系统上进行测试,或者使用强烈规定的先决条件(如不支持XP)。然而,要求高于96 dpi的分辨率仍然是不合理的,许多机器仍处于该传统设置。至少是因为改变它导致许多程序行为不端。 96 dpi一直是 way 的默认设置,但是那些日子已经结束了。

相关问题