方法一创建字体
设置HDC的字体
HFONT CreateFont(
/************************************************************************/
HFONT hFont;
HDC hDC;
hFont=CreateFont(10,10,FW_THIN,true,false,
CHInesEBIG5_CHARSET,OUT_CHaraCTER_PRECIS,
CLIP_CHaraCTER_PRECIS,DEFAULT_QUALITY,
FF_MODERN,"宋体");
SelectObject(hDC,hFont);
/************************************************************************/
我们也可以自己定义一个字体类,在该类中定义创佳字体的函数,如下:
#include <windows.h>
#include "gl/gl.h"
class glfont
{
public:
private:
}
void glfont::createfont(TCHAR *facename,bool strikeout);
{
void GLfont::CreateFont(TCHAR *facename,bool strikeout)
{
}
//implementation
GLfont f;
在Windows内部,字体是以一个名为LOGFONT的结构来表示
结构体原型:
typedef struct tagLOGFONT
{
LONG lfheight; //以逻辑单位指定字体字符元(character cell)或字符的高度。
LONG lfWidth; //以逻辑单位指定字体字符的平均宽度
LONG lfEscapement; //以十分之一度为单位指定每一行文本输出时相对于页面底端的角度
LONG lfOrientation; //以十分之一度为单位指定字符基线相对于页面底端的角度
LONG lfWeight; //指定字体重量。在Windows中,字体重量这个术语用来指代字体的粗细程度。
BYTE lfItalic; //当lfItalic为TRUE时使用斜体
BYTE lfUnderline; //当lfUnderline为TRUE时给字体添加下划线
BYTE lfStrikeOut; //当lfStrikeOut为TRUE时给字体添加删除线
BYTE lfCharSet; //指定字符集。可以使用下面的预定义值: ANSI_CHARSET
// OEM_CHARSET
// SYMBOL_CHARSET
// UNICODE_CHARSET
//其中OEM字符集是与操作系统相关的。
BYTE lfOutPrecision; //指定输出精度。输出精度定义了输出与所要求的字体高度、宽度、字符方向等的接近程度。
//它可以为下面的 OUT_CHAR
// ACTER_PRECIS
// OUT_DEFAULT_PRECIS
// OUT_STRING_PRECIS
// OUT_stroke_PRECIS
BYTE lfClipPrecision; //指定剪辑精度。剪辑精度定义了当字符的一部分超过剪辑区域时对字符的剪辑方式.
//它可以为下列值之一:CLIP_CHAR
//ACTER_PRECIS
//CLIP_DEFAULT_PRECIS
//CLIP_stroke_PRECIS
BYTE lfQuality; //定义输出质量。输出质量定义了图形设备接口在匹配逻辑字体属性到实际的物理字体的所使用的方式.
//它可以为下列值之一:DEFAULT_QUALITY (默认质量)
//DRAFT_QUALITY (草稿质量)
//PROOF_QUALITY (正稿质量)
BYTE lfPitchAndFamily;// 指定字体的字符间距和族
TCHAR lfFaceName[LF_FACESIZE]; //一个指定以NULL结尾的字符串的指针,它指定的所用的字体名。 } LOGFONT;
举例:
LOGFONT logFont;
//内容字体设置
logFont.lfheight =(50);
logFont.lfWidth = 0;
logFont.lfEscapement = 0;
logFont.lfOrientation = 0;
logFont.lfWeight = 500;
logFont.lfItalic = 0;
logFont.lfUnderline = 0;
logFont.lfStrikeOut = 0;
logFont.lfCharSet = ANSI_CHARSET;
logFont.lfOutPrecision = OUT_DEFAULT_PRECIS;
logFont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
logFont.lfQuality = PROOF_QUALITY;
logFont.lfPitchAndFamily = VARIABLE_PITCH | FF_ROMAN;
strcpy(logFont.lfFaceName,"宋体");
CFont font;
font.CreateFontIndirect(&logFont);
m_RichText.SetFont(&font);
修改字体
HFONT hFont=GetStockObject(DEFAULT_GUI_FONT);
LOGFONT logFont={0};
Getobject(hFont,sizeof(logFont),&logFont);
DeleteObject(hFont);
hFont=NULL;
logFont.lfheight=200; //这里设置字体大小
_tcscpy(TEXT(logFont.lfFaceName),TEXT("宋体"));
hFont=CreateFontIndirect(&logFont);