[转]LOGFont, HFont和CFont
实际上就是逻辑字体和物理字体的区别
LOGFONT: 一个结构,用来逻辑上表达一个字体,比如LOGFONT.lfFaceName是字体的名字
HFONT: 一个句柄,相当于表示内存中的一个字体对象,它可以马上拿来用
CFont: 是mfc对于HFONT的一种封装
可以说LOGFONT是一种墨水的名字,比如英雄牌,比较抽象
而HFONT表示实实在在的一瓶墨水,打开瓶盖就可以用
CFont只是把一瓶墨水外面包了一层纸,其实它还是一瓶墨水
**************************************
如果需要定义字体的各个小的细节等复杂的字体就用LOGFONT
HFONT可以是他们两个相互之间发生联系
**************************************
CFont -> LogFont:
pFont->CreateFont(.... //填的参数很多:(
LOGFONT logFont;
pFont->GetLogFont(&logFont)//得到刚刚在Create里填的东东
LOGFONT logfont;
lstrcpy((LPSTR)logfont.lfFaceName,(LPSTR)"楷体_GB2312");
logfont.lfWeight=700;
logfont.lfWidth=20;
logfont.lfHeight=50;
logfont.lfEscapement=0;
logfont.lfUnderline=FALSE;
logfont.lfItalic=FALSE;
logfont.lfStrikeOut=FALSE;
logfont.lfCharSet=GB2312_CHARSET; //以上参数好像一个都不能少
pFont->CreateFontIndirect(&logfont);
//行了,这下就有内容了。可以拿来用了。
可以用CWnd::GetFont得到当前窗口的font。
} LOGFONT;
lfHeight:
以逻辑单位指定字体字符元(character cell)或字符的高度。字符高度值为字符元高度值减去内部行距(internal-leading)值。当lfHeight大于0时,字体映射程序将该值转换为设备单位,并将它与可用字体的字符元高度进行匹配;当该参数为0时,字体映射程度将使用一个匹配的默认高度值;如果参数的值小于0,则将其转换为设备单位,并将其绝对值与可用字体的字符高度进行匹配。对于任何一种情况,字体映射程度最终得到的字体高度值不会超过所指定的值。以MM_TEXT映射模式下,字体高度值和磅值有如下的换算公式:lfHeight=-MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
lfWidth:
以逻辑单位指定字体字符的平均宽度。如果lfWidth的值为0,则根据设备的纵横比从可用字体的数字转换纵横中选取最接近的匹配值,该值通过比较两者之间的差异的绝对值得出。
lfEscapement:
以十分之一度为单位指定每一行文本输出时相对于页面底端的角度。
lfOrientation:
以十分之一度为单位指定字符基线相对于页面底端的角度。
lfWeight:
指定字体重量。在Windows中,字体重量这个术语用来指代字体的粗细程度。lfWeight的范围为0到1000,正常情况下的字体重量为400,粗体为700。如果lfWeight为0,则使用默认的字体重量。
lfItalic:
当lfItalic为TRUE时使用斜体
lfUnderline:
当lfUnderline为TRUE时给字体添加下划线
lfStrikeOut:
当lfStrikeOut为TRUE时给字体添加删除线
lfCharSet:
指定字符集。可以使用以下预定义的值:ANSI_CHARSET、BALTIC_CHARSET、CHINESEBIG5_CHARSET、DEFAULT_CHARSET、EASTEUROPE_CHARSET、GB2312_CHARSET、GREEK_CHARSET、HANGUL_CHARSET、MAC_CHARSET、OEM_CHARSET、RUSSIAN_CHARSET、SHIFTJIS_CHARSET、SYMBOL_CHARSET、TURKISH_CHARSET。
其中,OEM_CHARSET 表示字符集依赖本地操作系统。
DEFAULT_CHARSET 表示字符集基于本地操作系统。例如,系统位置是 English (United States),字符集将设置为 ANSI_CHARSET。
lfOutPrecision:
指定输出精度。输出精度定义了输出与所要求的字体高度、宽度、字符方向等的接近程度。它可以为下面的值之一:OUT_CHARACTER_PRECIS、OUT_DEFAULT_PRECIS、OUT_STRING_PRECIS、OUT_STROKE_PRECIS。
lfClipPrecision:
指定剪辑精度。剪辑精度定义了当字符的一部分超过剪辑区域时对字符的剪辑方式,它可以为下列值之一:CLIP_CHARACTER_PRECIS、CLIP_DEFAULT_PRECIS、CLIP_STROKE_PRECIS。
lfQuality:
定义输出质量。输出质量定义了图形设备接口在匹配逻辑字体属性到实际的物理字体的所使用的方式,它可以为下列值之一:DEFAULT_QUALITY (默认质量)、DRAFT_QUALITY (草稿质量)、PROOF_QUALITY (正稿质量)。
lfPitchAndFamily:
指定字体的字符间距和族。最低两位指定字体的字符间距为以下值之一:DEFAULT_PITCH、FIXED_PITCH、VARIABLE_PITCH第4到7位指定字体族为以下值之一:FF_DECORATIVE、FF_DONTCARE、FF_MODERN、FF_ROMAN、FF_SCRIPT、FF_SWISS这些值的具体含义可以参考Visual C++中关于结构LOGFONT的文档。字符间距和字体族可以使用逻辑或(OR)运算符来进行组合。
lfFaceName:
一个指定以NULL结尾的字符串,它指定的所用的字体名。该字符串的长度不得超过32个字符,如果lfFaceName为NULL,图形设备接口将使用默认的字体名。
////////////////////////////////////////////////////////////////////////////
CFont:

浙公网安备 33010602011771号