跟畫刷,區域一樣,字體是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);......//后面就是你要輸出的東西下面看看運行結果:
