当人们问这个问题,”我应该怎样判断当前处于大字体模式?”,他们实际上问的是,如何判断系统是否处于一个”特殊的DPI模式”,而不是问”大字体”。
Windows默认使用标准的96 DPI,也即:一英寸包含96个点。换句话说,如果Windows想在屏幕上绘制一根一英寸长的线条,则它会绘制96个像素点。这就是DPI的含义。当然了,这条线的物理长度取决于你的屏幕分辨率和显示器的大小。也就是说,这个96 DPI值只是一个名义上的值。
你可以到系统的控制面板中去修改DPI值,可以通过选择大字体,也可以选择一个自定义的字体大小。标准的字体是96 DPI,大字体为120 DPI。而自定义字体就是一个自定义DPI的字体。
随着屏幕显示技术的进步,高于96 DPI的情况将变得越来越普遍。
应用程序可以通过调用GetDeviceCaps来查询当前系统的DPI设置,如下图所示:
上面的代码假定了像素是正方形的,这符合大多数现代显示器的设计。(你也可以选择奇数屏幕分辨率并获得非方形像素,但大多数人会避免使用此类分辨率。)在过去,有许多设备具有非方形像素。 例如,EGA视频适配器的像素高度是宽度的1.33倍。
对于非方形像素设备,LOGPIXELSX和LOGPIXELSY度量的值将不同。 在EGA上,如果LOGPIXELSX 度量的值为96,则LOGPIXELSY度量将为72,因为每英寸只有72个垂直像素。 同样,非方形像素设备的 ASPECTX、ASPECTY 和 ASPECTXY 值也会有些有趣。我们看这三个值:36 27 45解释如下:ASPECTX为27,ASPECTY为36,则代表4:3的纵横比,ASPECTXY为45,代表斜边。
时代变了,到处都是高分屏了,屏幕的分辨率也都不是正方形的了。但是,老大哥的DPI设计,还是可以玩得转。
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《How do you detect “Large Fonts”?》