CFont字体类

字体由CFont类进行管理,创建CFont类必须使用CFont类的成员函数,这点与CPen和CBrush有所不同。

为了使用CFont对象,首先构造一个CFont对象,再通过调用CreateFont、CreateFontIndirect、CreatePointFont、CreatePointFontIndirect使一个Windows字体与此CFont对象关联,然后使用此CFont对象的成员函数就可以操作字体了。字体对象初始化及操作完成后利用CDC::SelectObject()函数将该字体选入到当前设备描述表中即可使用。CDC::SelectObject()函数会返回旧的GDI对象,故使用完毕后可以利用其恢复原来的字体样式。

一般使用CreatePointFont或CreatePointFontIndirect比使用CreateFont或CreateFontIndirect要更简便,因为前两者会自动的把字体高度的单位由点转换为逻辑单位。

注:“点”是传统计量字大小的单位,是从英文Point来的,一般用小写p表示,俗称“磅”。其换算关系为:1p=0.35146mm≈0.35mm,1英寸=72p。

在绘图时还经常会提到逻辑和物理,例如逻辑单位、物理单位,通俗点说,逻辑的就是与具体设备无关的,甚至我们可以自定义,物理的就是由具体设备决定的了。

各种字体字样可以在”VC-工具-选项-字体和颜色“中进行预览。

1、
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 //字体的字样名
);
该函数通过指定的一些特征初始化CFont对象。eg:

#define CREATE_FONT(nHeignt,sName) CreateFont(\
    nHeignt,                    \
    0,                          \
    0,                          \
    0,                          \
    FW_NORMAL,                  \
    FALSE,                        \
    FALSE,                        \
    0,                            \
    DEFAULT_CHARSET,            \
    OUT_DEFAULT_PRECIS,         \
    CLIP_DEFAULT_PRECIS,        \
    CLEARTYPE_QUALITY,          \
    DEFAULT_PITCH | FF_SWISS,    \
    sName                       \
   )

......

CPaintDC dc(this);
static CFont font;
font.CREATE_FONT(20, _T("宋体"));
dc.SelectObject(&font);
CString strGrade(_T("hello world"));
dc.TextOut(0,50,strGrade);

2、BOOL CreateFontIndirect(const LOGFONT* lpLogFont);

通过一个LOGFONT结构体变量给出的特征来初始化CFont对象。参数lpLogFont是指向LOGFONT结构体变量的指针,此LOGFONT结构体变定义了逻辑字体的特征。LOGFONT结构体的定义可以参见VS2010/MFC编程入门之十八(对话框:字体对话框)。

3、BOOL CreatePointFont(int nPointSize,LPCTSTR lpszFaceName,CDC* pDC = NULL);

此函数提供了一种由指定字样和点数创建字体的简单方式。参数的意义如下:

nPointSize:指定字体高度,以十分之一点为单位。例如,nPointSize为120则表示是12点的字体。

lpszFacename:指定字体的字样名的字符串。此字符串的长度不应超过30个字符。Windows函数EnumFontFamilies可以枚举出当前所有可用字体的字样名。如果lpszFacename为NULL,则GDI使用一种与设备无关的字体。

pDC:指向CDC对象,用来将nPointSize指定的高度转换为逻辑单位,如果为NULL,则使用屏幕设备上下文进行转换。

eg:

CPaintDC dc(this);
CFont fontGrade;
fontGrade.CreatePointFont(100, L"宋体");
dc.SelectObject(&fontGrade);
CString strGrade(_T("hello world"));
dc.TextOut(0,50,strGrade);

4、BOOL CreatePointFontIndirect(const LOGFONT* lpLogFont,CDC* pDC = NULL);

此函数是通过指定的字样和点数创建字体的间接方式。参数lpLogFont指向一个LOGFONT结构体变量,此LOGFONT变量定义了逻辑字体的特征,它的lfHeight成员以十分之一点为单位,而不是逻辑单位。参数pDC指向CDC对象,用来将lfHeight表示的高度转换为逻辑单位,如果为NULL,则使用屏幕设备上下文进行转换。此函数与CreateFontIndirect很相似,但区别是LOGFONT变量中lfHeight成员的单位是十分之一点而不是逻辑单位。

5、int GetLogFont(LOGFONT * pLogFont);

获取CFont对象的LOGFONT结构体的拷贝。参数pLogFont指向用来接收字体信息的LOGFONT结构体变量

原文地址:http://baike.baidu.com/link?url=U3LC37M7arLFTm3aUafxOLLQ_S0RYtdhHBnKxIWU5UxuWQGan8uktCsOFT5LOK7_aCTpdgeQXcWysQ-ZDTwiHa

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值