我需要从给定字体(例如 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?
}
我需要从给定字体(例如 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?
}
有GetCharABCWidths
,但请注意,它不会告诉您有关字距调整的信息,因此它可能有用也可能没有用,具体取决于您打算如何处理这些信息。
如果您想要实际文本字符串的宽度,有几个函数可以为您测量它,例如GetTextExtentPoint32
. 这些功能将包括任何字距更正。
这应该做的工作:
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");