CpuDbg 发表于 2024-4-30 10:05:55

GetTextExtentPoint32获取字体大小的问题

最近在写调试器的字体. 遇到了个很奇怪的问题.
明明字体应该很漂亮, 但是画上去的总是很难看. 如下图:



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


                SIZE tagSize_ = {0};
                ODplugin_UI_GetDCSize(hDbBuff, tagSize_, _TEXT(" "));
                ODplugin_UI_GetDCSize(hDbBuff, tagSize_, _TEXT("1"));
                ODplugin_UI_GetDCSize(hDbBuff, tagSize_, _TEXT("a"));
                ODplugin_UI_GetDCSize(hDbBuff, tagSize_, _TEXT("A"));
                ODplugin_UI_GetDCSize(hDbBuff, tagSize_, _TEXT("w"));
                ODplugin_UI_GetDCSize(hDbBuff, tagSize_, _TEXT("W"));
                ODplugin_UI_GetDCSize(hDbBuff, tagSize_, _TEXT("Q"));


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



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



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

页: [1]
查看完整版本: GetTextExtentPoint32获取字体大小的问题