跟画刷,区域一样,字体是GDI其中的一个对象,可以使用SelectObject来添加到HDC环境中。
创建字体有两种方法
1CreateFont
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 //字体名称
);
2CreateFontIndirect
HFONT CreateFontIndirect( CONST LOGFONT* lplf // characteristics );
看看LOGFONT的定义:
typedef struct tagLOGFONT { // lf
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方法来创建字体
SelectObject(hdc,CreateFont(0,0,0,0,0,0,0,0,XXCharSet,0,0,0,FIXED_PITCH,NULL));//至于默认值取什么,自己查表,这里不重点讲
方法二:利用CreateFontIndirect方法创建字体(重点讲)
看看代码:
case WM_PAINT ://前面声明了LOGFONT lonfont;
hdc = BeginPaint (hwnd, &ps) ;
GetObject(GetStockObject(SYSTEM_FONT),sizeof(LOGFONT),&logfont);
logfont.lfItalic=true;//使用斜体
logfont.lfHeight=16;//字体高度为16PX
logfont.lfWeight=20;//字体宽度为20PX
logfont.lfCharSet=GB2312_CHARSET;//国标2312
wsprintf(logfont.lfFaceName,TEXT("%s"),TEXT("宋体"));
hfont=CreateFontIndirect(&logfont);//字体为宋体
SelectObject(hdc,hfont);......//后面就是你要输出的东西
下面看看运行结果: