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