如何强制winforms应用程序使用我在每台机器上指定的字体/字体?我有一个ac#app,其中字体似乎在不同的机器上改变了大小,并且它不是一个分辨率thig.这是在Windows 7上使用ac#app.有没有办法强制我想要的字体大小或用户os字体总是否决?
Han*_*ant 12
字体大小以磅为单位指定.一点是1/72英寸.问题是,这需要与其他Windows窗体一起使用,其中几乎所有内容都以像素为单位指定.问题是有多少像素成为重点.这取决于您的视频适配器的每英寸点数设置.
传统的设置是每英寸96点.因此,如果您要求9磅字体,您将得到一个9/72*96 = 12像素高的字体.只要控件的客户区域高度至少为12像素,其中显示的文本就不会被剪裁.
但是,可以更改视频适配器的DPI设置.他们在XP中有点困难,你必须进入Display applet的Advanced设置才能这样做.它在Vista中变得更加容易,有一个很好的统治者和诸如此类的直接链接.
下一个常见设置是120 DPI,每英寸点数多125%.这9点字体现在需要9/72*120 = 15像素.如果显示该文本的原始控件仍为12像素,则文本将被剪切.基本上,下降器被剪掉了.
所以要解决这个问题,表单中控件的Control.Size属性需要更改.它们需要缩放以适应更大的DPI设置.Windows Forms很乐意支持它.它是自.NET 2.0以来的Form.AutoScaleMode.当您将其设置为None以外的其他内容时,Windows窗体中的自动代码会启动,以补偿设计表单的计算机与显示表单的计算机之间的差异.在120 DPI的情况下,它将使表单和控件更大.这样他们就可以显示文本而不会被剪裁.
但是,有一个复杂的问题.更改DPI设置非常适合字体.TrueType是一种非常棒的技术,能够以任何大小呈现美观的类型.但对于包含艺术线条的图像,重新缩放不起作用.当你重新缩放它们时,它们会得到杂散的额外像素或变得模糊.
返回字体:如果您更改显示器的DPI设置,用户可能会希望字体跟随.在XP时代,这确实有效.如果更改视频适配器的DPI设置,则会提示您重新启动操作系统.那时候很重要,因为有很多程序使用了设备字体,而不是TrueType字体.不可缩放的字体.激活了与DPI设置匹配的新字体.因此,视频DPI的较大值与较大的系统基本字体大小匹配.
大约在同一时间,自暗杀以来,微软的某种天才提出了一个非常好的主意.居住在东亚的人有一个基于人物的书写系统.复杂的字形,需要大量像素才能显示细节.96 DPI的12像素不会留下很大的空间来制作漂亮的中文或韩文字形.增加DPI显然可以改善这一点,但代价是模糊图像.想法:增加系统基本字体大小但不更改视频DPI.
然而,现在出现了一个新问题:如何自动扩展UI.您可以在可以分配给AutoScaleMode属性(Font或DPI)的值中看到这一点.哪一个对于目标机器是正确的是不容易猜到的.字体通常是更好的选择,因为您要确保文本不被剪裁.但是,如果要确保图像以正确的大小显示,则需要DPI.如果你想要两者,那么你就会被困在摇滚和硬地之间,除非系统基础字体大小与视频DPI设置相匹配,否则你无法摆脱它.