函式功能
該函式創建一種有特殊性的邏輯字型,此邏輯字型可以在後面被任何設備選擇。函式原型:
HFONT CreateFont(
int nHeight, // logical height of font height
int nWidth, // logical average character width
int nEscapement, // angle of escapement
int nOrientation, // base-line orientation angle
int fnWeight, // font weight
DWORD fdwItalic, // italic attribute flag
DWORD fdwUnderline, // underline attribute flag
DWORD fdwStrikeOut, // strikeout attribute flag
DWORD fdwCharSet, // character set identifier
DWORD fdwOutputPrecision, // output precision
DWORD fdwClipPrecision, // clipping precision
DWORD fdwQuality, // output quality
DWORD fdwPitchAndFamily, // pitch and family
LPCTSTR lpszFace // pointer to typeface name string
);
參數
nHeight:指定字型的字元單元或字元的邏輯單位高度,字元的高度值(也被稱為em高度)是指字元單元高度值減去內部標頭值。字型映射器以如下方式解釋nHeight指定的值,各值含義為:>0:字型映射器轉換這個值以設備單位,並和已有字型的單元高度相匹配。
0:字型映射器轉換在選擇匹配時用一個預設的高度值。
<0:字型映射器轉換這個值到設備單位,並將它的絕對值和已有字型的字元高度相匹配。
比較所有的高度,字型映射器選擇不超過要求大小的最大字型。
此映射當字型第一次被使用時發生。
對於MM_TEXT映射方式,可以用下面的公式為一種指定了點大小的字型確定高度:
nHeight=-MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY),72)
nWidth:指定所要求字型的字元的邏輯單位的平均寬度。如果此值為0,字型映射器選擇一個closest match值,closest match值是由比較當前設備的特徵係數與可使用字型的數位化特徵係數之差的絕對值而確定的。
nEscapement:指定移位向量和設備X軸之間的一個角度,以十分之一度為單位。移位向量平行於正文行的基線。
Windows NT:當圖形設備設定為GM_ADVANCED時,可以不依賴字元串的字元的定位角而指定字元串的移位角。
當圖形模式被設定為GM_COMPATIBLE時,nEscapement同時指定移位角和定位角,可以設定nEscapement和nOrientation為相同的值。
Windows 95:nEscapement同時指定移位角和定位角,可設定nEscapement和nOrientation為相同的值。
nOrientation:指定每個字元的基線和設備X軸之間的角度。
FnWeight:在0到1000之間指定字型的權值,如400表示標準體,700表示黑(粗)體,如果此值為0,則使用預設的權值。
定義
可使用如下值:
FW_DONTCARE:0;FW_THIN;100;FW_EXTRALIGHT;200;FW_ULTRALIGHT;200;FW_LIGHT;300;FW_NORMAL:400;FW_MEDIUM;500;FW_SEMIBOLD;600;FW_DEMIBOLD;600;FW_BOLD:700;FW_EXTRABOLD;800;FW_BLACK;900。
fdwItalic:如果設定為TRUE,則字型設定為斜體。
fdwUnderline:如果設定為TRUE,則字型增加下劃線。
fdwStrikeOut:如果設定為TRUE,則字型增加刪除線。
fdwCharSet:指定字元集,下列值是預定義的:
ANSI_CHARSET; BALTIC_CHARSET; CHINESEBIG5_CHARSET; DEFAULT_CHARSET;
EASTEUROPE_CHARSET; GB2312_CHARSET; GREEK_CHARSET; HANGUL_CHARSET; MAC_CHARSET; OEM_CHARSET; RUSSIAN_CHARSET; SHIFTJIS_CHARSET;
SYMBOL_CHARSET; TURKISH_CHARSET。
韓國Windows:JOHAB_CHARSET;
中東地區Windows:HEBREW_CHARSSET; ARABIC_CHARSET
泰國Windows:THAI_CHARSET
OEM_CHARSET指定的字元集與作業系統有關。
可以使用DEFAULT_CHARSET值來允許字型的名字和大小來充分描述邏輯字型。如果指定的字型名不存在,任何字元集的字型都可以替代指定的字型,所以應該小心地用DEFAULT_CHARSET來避免不期望的結果出現。
nmnm
作業系統
作業系統中存在其他字元集的字型。如果一個應用程式用一種未知字元集的字型,則應用程式不會試圖去翻譯或解釋用那種字型寫出來的字元串。在字型映射過程中此參數很重要。為確保獲得一致的結果,指定一個特殊的字元集。如果在lpszFace參數中指定了一個字型名,確定fdwCharSet值與由lpszFace指定的字型字元集是否匹配。
fdwOutputPrecision:指定輸出精度,輸出精度義輸出與要求的字型高度、寬度、字元定位、移位、字元間距和字元類型的匹配程式,它可取下列值之一:
OUT_CHARACTER_PRECIS;未用。
OUT_DEFAULT_PRECIS:指定預設的字型映射器狀態。
OUT_DEVICE_PRECIS:指示字型映射器在當系統里有多種字型使用同一個字型使用同一個名字時選擇一種設備字型。
OUT_OUTLINE_PRCIS:在Windows NT中此值指示字型映射器從TrueType和其他基於框線的字型中選擇。
OUT_RASTER_PRECIS:指示字型映射器在當系統里有多種字型使用同一個名字時選擇一種光柵字型。
OUT_STRING_PRECIS:此值沒有被字全映射器使用,但是當掃描字型被列舉時作為返回值。
OUT_STROKE_PRECIS:在Windows NT中此值沒有被字型映射器使用,但是當TrueType字型、其他基於框線的字型和向量字型被列舉時,作為返回值。
Windows 95:此值沒有被字型映射器使用,但是當TrueType字型或向量字型被列舉時,作為返回值。
OUT_TT_ONLY_PRECIS:指示字型映射器僅從TrueType字型中選擇,如果系統中沒有安裝TrueType字型,則字型映射返回預設狀態。、
OUT_TT_PRECIS:指示字型映射器在當系統里有多種同名的字型時選擇一種TrueType字型。
當作業系統含有多種與指定名字同名的字型時,應用程式可以使用OUT_DEVICE_PRECIS,OUT_RASTER_PRECIS和OUT_TT_PRECIS值來控制字型映射器如何選擇一種字型,例如,如果作業系統含有名字Symbol的光柵和TrueType兩種字型,指定OUT_TT_PRECIS使字型映射器選擇TrueType方式。指定OUT_TT_ONLY_PRECIS使字型映射器選擇一種TrueType字型,儘管這會給TrueType字型換一個名字。
fdwClipPrecision;指定裁剪精度,裁剪精度定義如何裁剪部分超出裁剪區的字元,它可取一個或多個下列值:
CLIP_DEFAULT_PRECIS:指定預設裁剪狀態。CLIP_CHARACTER_PRECIS:未用。
CLIP_STROKE_PRECIS:未被字型映射器使用,但是當光柵字型、向量字型或TrueType字型被列舉時作為返回值。在Windows環境下,為保證兼容性,當列舉字型時這個值總被返回。
CLIP_MASK:未用。CLIP_EMBEDDED:要使用嵌入式唯讀字型必須使用此標誌。
CLIP_LH_ANGLES:當此值被使用時,所有字型的旋轉依賴於坐標系統的定位是朝左的還是朝右的。
如果未使用此值,設備字型總是逆時針方向旋轉,但其他字型的旋轉依賴於坐標系統的定向。要得到更多關於坐標系統定向的信息,參見參數orientation。
CLIP_TT_ALWAYS:未用。
fdwQuality:指向輸出質量,輸出質量定義GDI如何仔細地將邏輯字型屬性與實際物理字型屬性相匹配。它可取下列值之一:
DEFAULT_QUALITY:字型的外觀不重要。
DRAFT_QUALITY:字型外觀的重要性次於使用PROOF_QUALITY時,對GDI光柵字型,縮放比例是活動的,這意味著多種字型大小可供選擇,但質量可能不高,如果有必要,粗體、斜體、下劃線、strikeout字型可被綜合起來使用。
PROOF_QUALITY:字元質量比精確匹配邏輯字型字型屬性更重要。對GDI掃描字型,縮放比例是活動的,並選擇最接近的大小。儘管當使用PROOF_QUALITY時,選擇字型大小並不完全匹配,但字型的質量很高,並沒有外觀上的變形。如果有必要,粗體、斜體、下劃線、strikeout字型可被綜合起來使用。
fdwPitchAndFamily:指定字型間距和字型族,低端二位指定字型的字元間距,它可取下列值之一:
DEFAULT_PITCH;FIXED_PITCH; VARIABLE_PITCH
高端四位指定字型族,可取下列值之一:
FF_DECORATIVE:新奇的字型,如老式英語(Old English)。FF_DONTCARE:不關心或不知道。
FF_MDERN:筆劃寬度固定的字型,有或者無襯線。如Pica、Elite和Courier New。
FF_ROMAN:筆劃寬度變動的字型,有襯線。如MS Serif。
FF_SCRIPT:設計成看上去象手寫體的字型。如Script和cursive。
FF_SWISS:筆劃寬度變動的字型,無斜線。如MS Sans Serif。
應用程式可以用運算符OR將字元間距和字型族組合起來給fdwPitchAndFamily賦值。
字型族描述一種字型的普通外觀,當所有的精確字樣都不能使用時,可用它們來指定字型。
lpszface:指向指定字型的字樣名的、以\0結束的字元串指針,字元串的長度不能超過32個字元(包括字元\0),函式EnumFontFamilies可用來列舉所有當前可用字型的字樣名。
如果lpszFace為NULL或指向一個空串,GDI使用能匹配其他屬性的第一種字型。
返回值:如果函式調用成功,返回值是一種邏輯字型句柄;如果函式調用失敗,返回值為NULL。
Windows NT:若想獲得更多錯誤信息,請調用GetLastError函式。
備註:當一種字型不再使用時,可用DeleteObject來刪除。
為保護那些提供字型給Windows和Windows NT的賣主的著作權,基於Win32的應用程式總是列出所選擇字型的準確名字。由於不同的系統會使用不同的字型,不要認為所選擇字型就是要求的字型。例如,如果要求名叫Palatino的字型,但系統沒提供那樣一種字型,則字型映射器將會以一種不同名但有相似屬性的字型取而代之。系統總是將用戶選擇的字型名報告出來。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;頭檔案:wingdi.h;庫檔案:gdi32.lib;Unicode:在Windows NT環境下以Unicode和ANSI兩種方式實現。
示例
HFONT hFont;HDC hDC;
hFont=CreateFont(10,10,0,0,FW_THIN,true,false,false,
CHINESEBIG5_CHARSET,OUT_CHARACTER_PRECIS,
CLIP_CHARACTER_PRECIS,DEFAULT_QUALITY,
FF_MODERN,"宋體");
SelectObject(hDC,hFont)