跟画刷,区域一样,字体是GDI其中的一个对象,可以使用SelectObject来添加到HDC环境中。
创建字体有两种方法
1CreateFont
[cpp] view plain copy PRint?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 //字体名称 ); 
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的定义:
[cpp] view plain copy print?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; 
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方法来创建字体
[cpp] view plain copy print?SelectObject(hdc,CreateFont(0,0,0,0,0,0,0,0,XXCharSet,0,0,0,FIXED_PITCH,NULL));//至于默认值取什么,自己查表,这里不重点讲 
SelectObject(hdc,CreateFont(0,0,0,0,0,0,0,0,XXCharSet,0,0,0,FIXED_PITCH,NULL));//至于默认值取什么,自己查表,这里不重点讲方法二:利用CreateFontIndirect方法创建字体(重点讲)
看看代码:
[cpp] view plain copy print?case WM_PAINT ://前面声明了LOGFONT lonfont; hdc = BeginPaint (hwnd, &ps) ; LOGFONT logfont; 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);......//后面就是你要输出的东西 
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);......//后面就是你要输出的东西下面看看运行结果:
