CFont类

该类封装一个Windows的图形设备接口(GDI)字体并且提供了操纵字体的成员函数,要想使用CFont对象,首先构造一个CFont对象,然后使用成员函数CreateFont、CreateFontIndirect、CreatePointFont或CreatePointFontIndirect把该对象与Windows字体相连,这样用户便可以使用该对象所成员函数操纵字体。

1构造CFont类对象

该类只有一个构造函数,即CFont();

该函数构造一个CFont对象。该对象在使用之前必须使用成员函数CreateFont、CreateFontIndirect、CreatePointFont或CreatePointFontIndirect进行初始化,以便确定字体对象的参数。

2创建CFont类对象

调用CreateFont函来选择一种字体时,需要的很多参数,该成员函数的原型声明如下:

BOOL CreateFont(int nHeight,int nWidth,int nEscapement,int nOrientation,int nWeight,BYTE bItalic,BYTE bUnderline,BYTE cStrikeOut,BYTE nCharSet,BYTE nOutPrecision,BYTE nClipPrecision,BYTE nQuality,BYTE nPitchAndFamily,LPCTSTR lpszFacename);

下面对其参数分别加以介绍:

参数nHeight:定义单位度量的字体高度。

参数nWidth定义逻辑单位度量的字体的平均宽度。

参数nEscapement:定义字体标注行的逆时针方向的旋转角度(以1/10度为单位),正常情况(即水平进行标注时)的角度为0。当标注行逆进针旋转时,字体也旋转同样的角度。

参数nOrientatio:定义了角度(以1/10度为单位),该角度是一个字符的基线与X轴的夹角。当Y坐标值是向下为增加时,计算从X轴开始逆时针方向的角度,反之,当Y坐标值是向上增加时,计算从X轴开始顺序时针方向的角度。

参数nWeight:定义了字体的浓度即字体的粗细程度(像素数/1000)。下表列出了该参数的通用常量的值。

字体的浓度值-精细程度
常量常量
FW_DONTCARE0FW_SEMIBOLD600
FW_THIN100FW_DEMIBOLD600
FW_EXTRALIGHT200FW_BOLD700
FW_ULTRALIGHT200FW_EXTRABOLD800
FW_LIGHT300FW_ULTRABOLD800
FW_NORMAL400FW_BLACK900
FW_REGUNAL400FW_HEAVY900
FW_MEDIUM500  

参数bItalic:确定字体是否为斜体。

参数bUnderline:确定字体是否加下划线。

参数cStrikeOut:确定字体是否被穿透(字符中央有一条横线)

参数cCharSet:指出了字体的字体集。 

预定义的字符集常量

常量

ANSI_CHARSET

0

DEFAULT_CHARSET

1

SYMBOL_CHARSET

2

SHIFTJIS_CHARSET

128

OEM_CHARSET

255 

参数nOutputPrecision指出了所要求的输出精度,该精度确定了输出与所要求的字体高度、宽度、控制、字符方位及间距的匹配和接近程度。一般取下列值 之一OUT_CHARACTER_PRECIS、OUT_DEFAULT_PRECIS、OUT_DEVICE_PRECIS、OUT_RASTER_PRECIS、OUT_STRING_PRECIS、OUT_STROKE_PRECIS和OUT_TT_PRECIS。

参数nClipPrecision:指定了所要求的裁剪精度,当对图像的一个区域进行裁剪时,字体可能正好在裁剪线上。该参数说明怎样裁剪位于裁剪区之外的部分字体。

参数nQuality:指出了输出字体的质量.

参数nPitchAndFamily:确定了字体的间距和所属的族。这个8位参数的低4位确定了字体的间距,他们可以是DEFAULT_PITCH、FIXED_PITCH或VARIABLE_PITCH。高4位指定了字体族。

参数lpszFacename:是一个指向ASZIIZ字符串的指针,该字符串确定了目标字体的字型名。该参数的值一定不能超过30个字符,这个名称可由用户自行定义。

当调用CreateFontIndirect函数时,必须使用LOGFONT结构来构造CFont对象来绘制字体,该结构定义如下:

typedef struct tagLOGFONT{

LONG lfHeight;

LONG lfWidth;

LONG lfEscapement;

LONG lfOrientation;

LONG lfWeight;

BYTE lfItalic;

BYTE lfUnderline;

BYTE lfStrikeOut;

BYTE lfCharSet;

BYTE lfOutPrecision;

BYTE lfClipPrecision;

BYTE lfQuality;

BYTE lfPitchAndFamily;

TCHAR lfFaceName[LF_FACESIZE];

}LOGFONT;

该结构各成员变量的值与前面介绍的CreateFont函数的参数基本相同。

void CMyFontView::OnPaint() 
{
	CPaintDC dc(this); // 用于绘制的设备上下文
	
	// TODO: 在此处添加消息处理程序代码
	
	// 不要为绘制消息而调用 CWnd::OnPaint()
	//使用CreateFont创建字体;
	for(int i=5;i<10;i++)
	{
		CFont NewFont2;
		NewFont2.CreateFont(-i*5,0,100,
			0,400,
			FALSE,FALSE,
			0,
			ANSI_CHARSET,
			OUT_DEFAULT_PRECIS,
			CLIP_DEFAULT_PRECIS,
			DEFAULT_QUALITY,
			DEFAULT_PITCH|FF_SWISS,
			L"Arial");
		CFont* pOldFont2=dc.SelectObject(&NewFont2);
		dc.TextOut(0,50*i-200,L"使用函数CreateFont创建字体");
		dc.SelectObject(pOldFont2);
	}
}


 

void CMyFontView::OnPaint() 
{
	CPaintDC dc(this); // 用于绘制的设备上下文
	
	// TODO: 在此处添加消息处理程序代码
	
	// 不要为绘制消息而调用 CWnd::OnPaint()
	//重新设置LOGFONT结构体,以便选择字体风格;
	static LOGFONT lf;
	lf.lfHeight=40;
	lf.lfWidth=20;
	lf.lfItalic=true;
	lf.lfUnderline=true;
	lf.lfStrikeOut=true;
	lf.lfOrientation=0;
	lf.lfWeight=800;
	lf.lfEscapement=0;
	lf.lfCharSet=GB2312_CHARSET;
	lf.lfPitchAndFamily=FIXED_PITCH|FF_MODERN;
	dc.SetTextColor((COLORREF)0x000FF0000);

	CFont NewFont1;
	NewFont1.CreateFontIndirect(&lf);
	CFont* pOldFont1=dc.SelectObject(&NewFont1);
	dc.TextOut(0,10,L"使用函数CreateFontIndirect创建字体");
	dc.SelectObject(pOldFont1);
}


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值