1

我需要从给定字体(例如 Arial)中获取字符的宽度。只有边界框的宽度,没有间距。

HFONT font = CreateFont(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, L"Arial");

使用创建的 HFONT,有没有办法提取这些信息?

int MyGetCharWidth(HFONT font, wchar_t wch)
{
    // How to implement this?
}
4

2 回答 2

2

GetCharABCWidths,但请注意,它不会告诉您有关字距调整的信息,因此它可能有用也可能没有用,具体取决于您打算如何处理这些信息。

如果您想要实际文本字符串的宽度,有几个函数可以为您测量它,例如GetTextExtentPoint32. 这些功能将包括任何字距更正。

于 2013-04-10T16:20:51.533 回答
1

这应该做的工作:

int MyGetCharWidth(HFONT font, wchar_t wch)
{
  HDC hDC = GetDC(NULL) ;
  HGDIOBJ oldfont = SelectObject(hDC, font) ;

  RECT rect ;
  DrawText(hDC, &wch, 1, &rect, DT_CALCRECT|DT_NOPREFIX) ;

  SelectObject(hDC, oldfont) ;
  return rect.right - rect.left ;
}

顺便说一句,这没有意义:

HFONT font = CreateFont(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, L"Arial");

您必须为某些参数指定非空值,例如:

CreateFont(fontsize, 0, 0, 0, FW_NORMAL, 0, 0, 0,
                          DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
                          CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
                          DEFAULT_PITCH, "Arial");
于 2013-04-11T07:02:18.473 回答