获取字体的字符宽度

时间:2013-04-10 13:57:38

标签: winapi

我需要从给定字体中获取字符的宽度(例如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?
}

2 个答案:

答案 0 :(得分:2)

GetCharABCWidths,但请注意,它不会告诉您有关字距调整的信息,因此根据您计划对信息执行的操作,它可能有用也可能没用。

如果您想要实际文本字符串的宽度,可以使用多个函数来测量它,例如GetTextExtentPoint32。这些功能将包括任何字距调整。

答案 1 :(得分: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 ;
}

BTW这没有意义:

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");