注册

CpuDbg x96

查看: 43|回复: 0
收起左侧

GetTextExtentPoint32获取字体大小的问题

[复制链接]
发表于 2024-4-30 10:05:55 | 显示全部楼层 |阅读模式
最近在写调试器的字体. 遇到了个很奇怪的问题.
明明字体应该很漂亮, 但是画上去的总是很难看. 如下图:

字体错乱.

字体错乱.


重点看左下角数据区的HEX区域. 显示的数据全部挤在一起.
实际上这是因为字节间距的问题. 为了让字体显示适应各种字体,特意在程序中动态获取字体的大小.
但在实际程序中,获取到的大小和想像中的完全不一样.
比如下例代码:

[C++] 纯文本查看 复制代码
		SIZE tagSize_[30] = {0};
		ODplugin_UI_GetDCSize(hDbBuff, tagSize_[i++], _TEXT(" "));
		ODplugin_UI_GetDCSize(hDbBuff, tagSize_[i++], _TEXT("1"));
		ODplugin_UI_GetDCSize(hDbBuff, tagSize_[i++], _TEXT("a"));
		ODplugin_UI_GetDCSize(hDbBuff, tagSize_[i++], _TEXT("A"));
		ODplugin_UI_GetDCSize(hDbBuff, tagSize_[i++], _TEXT("w"));
		ODplugin_UI_GetDCSize(hDbBuff, tagSize_[i++], _TEXT("W"));
		ODplugin_UI_GetDCSize(hDbBuff, tagSize_[i++], _TEXT("Q"));


正常情况我的理解是同一个字体,同一个环境下, 1个字节长度理应是一样的.如下图:

1字节大小一样

1字节大小一样


但实际却不一定的. 不同的字体, 同样是1字节,获取的长度未必一样.  如下图:

1字节大小不一样

1字节大小不一样


在我随机找的几个字母测试, 其中 "W" 是最宽的. 我之前都是用的 " "  空格, 在有的字体中, 空格是最窄的.
以后在写类似的代码, 我就用 "W" 做为1字节来获取, 不会再用空格了.

回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注册

QQ|Archiver|手机版| CpuDbg x96

GMT, 2024-5-18 23:34 , Processed in 0.078125 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表