CreateFont

CreateFont

CreateFont,計算機語言函數,該函數創建一種有特殊性的邏輯字體,此邏輯字體可以在後面被任何設備選擇。

函數功能


該函數創建一種有特殊性的邏輯字體,此邏輯字體可以在後面被任何設備選擇。
函數原型:
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)