【发布时间】:2016-03-17 05:03:03
【问题描述】:
我正在尝试测量字符的大小,但无法得出正确的结果。我们使用带有 DT_CALCRECT 标志的 DrawText 来测量字符串,这似乎工作得很好(公平地说,我们还没有实际测试过它的像素完美测量)。
但是我现在尝试测量单个字符,即 Marlett 中的“x”符号来绘制关闭按钮,但它真的不想告诉我实际大小特点。它告诉我这个角色是 8x8,而实际上它是一个 6x5,然后这个角色被画得稍微偏离了我要求的位置。
高度方面,我猜它正在返回该字体的字符高度(所有字符都相同,所有字体都相同)。不过,对于宽度,它似乎在其中添加了字符间距,这似乎与其他字体无关(在 Arial 中尝试了几个字符)。在 Marlett 中,所有测试的字符似乎都返回相同的宽度。
是否有可能找出一个字符周围的额外间距,以便我可以将“x”放在一个框中?
【问题讨论】:
-
不要尝试自己渲染。改用DrawThemeBackground,调用GetThemeBackgroundExtent查询所需大小。
-
字体指标非常复杂。即使您挖掘出字形轮廓,TrueType 提示和像素网格拟合也可能会毁了您的一天。如果您不希望有任何惊喜,那么您应该使用位图。您需要一对夫妇来处理 dpiAwareness。