?CFont * f;
?? f = new CFont;
?? f->CreateFont(10, // nHeight
??????? 0, // nWidth
??????? 0, // nEscapement
??????? 0, // nOrientation
??????? FW_BOLD, // nWeight
??????? FALSE, // bItalic
??????? FALSE, // bUnderline
??????? 0, // cStrikeOut
??????? ANSI_CHARSET, // nCharSet
??????? OUT_DEFAULT_PRECIS, // nOutPrecision
??????? CLIP_DEFAULT_PRECIS, // nClipPrecision
????????????????????????? DEFAULT_QUALITY, // nQuality
?????????? DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
?????????? _T("Arial")); // lpszFac
?
?
cHeight是字體的高度。
cWidth是字體的寬度。
cEscapement是字體的傾斜角。
cOrientation是字體的傾斜角。
cWeight是字體的粗細(xì)。
bItalic是字體是否斜體。
bUnderline是字體是否有下劃線。
bStrikeOut是字體是否有刪除線。
iCharSet是字體使用的字符集。
iOutPrecision是指定怎樣選擇合適的字體。
iClipPrecision是用來確定裁剪的精度。
iQuality是怎么樣跟選擇的字體相符合。
iPitchAndFamily是間距標(biāo)志和屬性標(biāo)志。
pszFaceName是字體的名稱。
?
函數(shù)功能:該函數(shù)創(chuàng)建一種有特殊性的邏輯字體,此邏輯字體能夠在后面被不論什么設(shè)備選擇。
??? 函數(shù)原型:HFONT CreateFont(int nHeight, int nWidth, int nEscapement, int nOrientation, int fnWeight, DWORD fdwltalic, DWORD fdwUnderline, DWORD fdwStrikeOut, DWORD
fdwCharSet, DWORD fdwOutputPrecision, DWORD fdwClipPrecision, DWORD fdwQuality, DWORD fdwPitchAndFamily, LPCTSTR lpszFace);
??? 參數(shù):
??? nHeight:指定字體的字符單元或字符的邏輯單位高度,字符的高度值(也被稱為em高度)是指字符單元高度值減去內(nèi)部標(biāo)頭值。字體映射器以例如以下方式解釋nHeight指定的值,各值含義
為:
??? >0:字體映射器轉(zhuǎn)換這個(gè)值以設(shè)備單位,并和已有字體的單元高度相匹配。
??? 0:字體映射器轉(zhuǎn)換在選擇匹配時(shí)用一個(gè)缺省的高度值。
??? <0:字體映射器轉(zhuǎn)換這個(gè)值到設(shè)備單位,并將它的絕對(duì)值和已有字體的字符高度相匹配。
??? 比較全部的高度,字體映射器選擇不超過要求大小的最大字體。
??? 此映射當(dāng)字體第一次被使用時(shí)發(fā)生。
??? 對(duì)于MM_TEXT映射方式,能夠用以下的公式為一種指定了點(diǎn)大小的字體確定高度:
??? nHeight=-MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY),72)
??? nWidth:指定所要求字體的字符的邏輯單位的平均寬度。假設(shè)此值為0,字體映射器選擇一個(gè)closest match值,closest match值是由比較當(dāng)前設(shè)備的特征系數(shù)與可使用字體的數(shù)字化特征
系數(shù)之差的絕對(duì)值而確定的。
??? nEscapement:指定移位向量和設(shè)備X軸之間的一個(gè)角度,以十分之中的一個(gè)度為單位。移位向量平行于正文行的基線。
??? Windows NT:當(dāng)圖形設(shè)備設(shè)置為GM_ADVANCED時(shí),能夠不依賴字符串的字符的定位角而指定字符串的移位角。
??? 當(dāng)圖形模式被設(shè)置為GM_COMPATIBLE時(shí),nEscapement同一時(shí)候指定移位角和定位角,能夠設(shè)置nEscapement和nOrientation為同樣的值。
??? Windows 95:nEscapement同一時(shí)候指定移位角和定位角,可設(shè)置nEscapement和nOrientation為同樣的值。
??? nOrientation:指定每一個(gè)字符的基線和設(shè)備X軸之間的角度。
??? FnWeight:在0到1000之間指定字體的權(quán)值,如400表示標(biāo)準(zhǔn)體,700表示黑(粗)體,假設(shè)此值為0,則使用缺省的權(quán)值。
??? 為方便定義,可使用例如以下值:
??? FW_DONTCARE:0;FW_THIN;100;FW_EXTRALIGHT;200;FW_ULTRALIGHT;200;FW_LIGHT;300;
??? FW_NORMAL:400;FW_REGULAR;400;FW_MEDIUM;500;FW_SEMIBOLD;600;FW_DEMIBOLD;600;
??? FW_BOLD:700;FW_EXTRABOLD;800;FW_ULTRABOLD;800;FW_HEAVY;900;FW_BLACK;900。
??? fdwItalic:假設(shè)設(shè)置為TRUE則指定斜體。
??? fdwUnderline:假設(shè)設(shè)置為TRUE,則指定加下劃線的字全。
??? fdwStrikeOut:假設(shè)設(shè)置為TRUE,則strikeout指定字體。
??? 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;
??? 中東地區(qū)Windows:HEBREW_CHARSSET; ARABIC_CHARSET
??? 泰國Windows:THAI_CHARSET
??? OEM_CHARSET指定的字符集與操作系統(tǒng)有關(guān)。
??? 能夠使用DEFAULT_CHARSET值來同意字體的名字和大小來充分描寫敘述邏輯字體。假設(shè)指定的字體名不存在,不論什么字符集的字體都能夠替代指定的字體,所以應(yīng)該小心地用
DEFAULT_CHARSET來避免不期望的結(jié)果出現(xiàn)。
??? 操作系統(tǒng)中存在其它字符集的字體。假設(shè)一個(gè)應(yīng)用程序用一種未知字符集的字體,則應(yīng)用程序不會(huì)試圖去翻譯或解釋用那種字體寫出來的字符串。
??? 在字體映射過程中此參數(shù)非常重要。為確保獲得一致的結(jié)果,指定一個(gè)特殊的字符集。假設(shè)在lpszFace參數(shù)中指定了一個(gè)字體名,確定fdwCharSet值與由lpszFace指定的字體字符集是否匹
配。
??? fdwOutputPrecision:指定輸出精度,輸出精度義輸出與要求的字體高度、寬度、字符定位、移位、字符間距和字符類型的匹配程序,它可取下列值之中的一個(gè):
??? OUT_CHARACTER_PRECIS;未用。
??? OUT_DEFAULT_PRECIS:指定缺省的字體映射器狀態(tài)。
??? OUT_DEVICE_PRECIS:指示字體映射器在當(dāng)系統(tǒng)里有多種字體使用同一個(gè)字體使用同一個(gè)名字時(shí)選擇一種設(shè)備字體。
??? OUT_OUTLINE_PRCIS:在Windows NT中此值指示字體映射器從TrueType和其它基于邊框的字體中選擇。
??? OUT_RASTER_PRECIS:指示字體映射器在當(dāng)系統(tǒng)里有多種字體使用同一個(gè)名字時(shí)選擇一種光柵字體。
??? OUT_STRING_PRECIS:此值沒有被字全映射器使用,可是當(dāng)掃描字體被列舉時(shí)作為返回值。
??? OUT_STROKE_PRECIS:在Windows NT中此值沒有被字體映射器使用,可是當(dāng)TrueType字體、其它基于邊框的字體和向量字體被列舉時(shí),作為返回值。
??? Windows 95:此值沒有被字體映射器使用,可是當(dāng)TrueType字體或向量字體被列舉時(shí),作為返回值。
??? OUT_TT_ONLY_PRECIS:指示字體映射器僅從TrueType字體中選擇,假設(shè)系統(tǒng)中沒有安裝TrueType字體,則字體映射返回缺省狀態(tài)。、
??? OUT_TT_PRECIS:指示字體映射器在當(dāng)系統(tǒng)里有多種同名的字體時(shí)選擇一種TrueType字體。
??? 當(dāng)操作系統(tǒng)含有多種與指定名字同名的字體時(shí),應(yīng)用程序能夠使用OUT_DEVICE_PRECIS,OUT_RASTER_PRECIS和OUT_TT_PRECIS值來控制字體映射器怎樣選擇一種字體,比如,
假設(shè)操作系統(tǒng)含有名字Symbol的光柵和TrueType兩種字體,指定OUT_TT_PRECIS使字體映射器選擇TrueType方式。指定OUT_TT_ONLY_PRECIS使字體映射器選擇一種TrueType字體,
雖然這會(huì)給TrueType字體換一個(gè)名字。
??? fdwClipPrecision;指定裁剪精度,裁剪精度定義怎樣裁剪部分超出裁剪區(qū)的字符,它可取一個(gè)或多個(gè)下列值:
??? CLIP_DEFAULT_PRECIS:指定缺省裁剪狀態(tài)。CLIP_CHARACTER_PRECIS:未用。
??? CLIP_STROKE_PRECIS:未被字體映射器使用,可是當(dāng)光柵字體、向量字體或TrueType字體被列舉時(shí)作為返回值。在Windows環(huán)境下,為保證兼容性,當(dāng)列舉字體時(shí)這個(gè)值總被返回。
??? CLIP_MASK:未用。CLIP_EMBEDDED:要使用嵌入式僅僅讀字體必須使用此標(biāo)志。
??? CLIP_LH_ANGLES:當(dāng)此值被使用時(shí),全部字體的旋轉(zhuǎn)依賴于坐標(biāo)系統(tǒng)的定位是朝左的還是朝右的。
??? 假設(shè)未使用此值,設(shè)備字體總是逆時(shí)針方向旋轉(zhuǎn),但其它字體的旋轉(zhuǎn)依賴于坐標(biāo)系統(tǒng)的定向。要得到很多其它關(guān)于坐標(biāo)系統(tǒng)定向的信息,參見參數(shù)orientation。
??? CLIP_TT_ALWAYS:未用。
??? fdwQuality:指向輸出質(zhì)量,輸出質(zhì)量定義GDI怎樣細(xì)致地將邏輯字體屬性與實(shí)際物理字體屬性相匹配。它可取下列值之中的一個(gè):
??? DEFAULT_QUALITY:字體的外觀不重要。
??? DRAFT_QUALITY:字體外觀的重要性次于使用PROOF_QUALITY時(shí),對(duì)GDI光柵字體,縮放比例是活動(dòng)的,這意味著多種字體大小可供選擇,但質(zhì)量可能不高,假設(shè)有必要,粗體、斜體
、下劃線、strikeout字體可被綜合起來使用。
??? PROOF_QUALITY:字符質(zhì)量比精確匹配邏輯字體字體屬性更重要。對(duì)GDI掃描字體,縮放比例是活動(dòng)的,并選擇最接近的大小。雖然當(dāng)使用PROOF_QUALITY時(shí),選擇字體大小并不完
全匹配,但字體的質(zhì)量非常高,并沒有外觀上的變形。假設(shè)有必要,粗體、斜體、下劃線、strikeout字體可被綜合起來使用。
??? fdwPitchAndFamily:指定字體間距和字體族,低端二位指定字體的字符間距,它可取下列值之中的一個(gè):
??? DEFAULT_PITCH;FIXED_PITCH; VARIABLE_PITCH
??? 高端四位指定字體族,可取下列值之中的一個(gè):
??? FF_DECORATIVE:新鮮的字體,如老式英語(Old English)。FF_DONTCARE:不關(guān)心或不知道。
??? FF_MDERN:筆劃寬度固定的字體,有或者無襯線。如Pica、Elite和Courier New。
??? FF_ROMAN:筆劃寬度變動(dòng)的字體,有襯線。如MS Serif。
??? FF_SCRIPT:設(shè)計(jì)成看上去象手寫體的字體。如Script和Cursive。
??? FF_SWISS:筆劃寬度變動(dòng)的字體,無斜線。如MS Sans Serif。
??? 應(yīng)用程序能夠用運(yùn)算符OR將字符間距和字體族組合起來給fdwPitchAndFamily賦值。
??? 字體族描寫敘述一種字體的普通外觀,當(dāng)全部的精確字樣都不能使用時(shí),可用它們來指定字體。
??? lpszface:指向指定字體的字樣名的、以/0結(jié)束的字符串指針,字符串的長(zhǎng)度不能超過32個(gè)字符(包含字符/0),函數(shù)EnumFontFamilies可用來列舉全部當(dāng)前可用字體的字樣名。
??? 假設(shè)lpszFace為NULL或指向一個(gè)空串,GDI使用能匹配其它屬性的第一種字體。
??? 返回值:假設(shè)函數(shù)調(diào)用成功,返回值是一種邏輯字體句柄;假設(shè)函數(shù)調(diào)用失敗,返回值為NULL。
??? Windows NT:若想獲得很多其它錯(cuò)誤信息,請(qǐng)調(diào)用GetLastError函數(shù)。
??? 備注:當(dāng)一種字體不再使用時(shí),可用DeleteObject來刪除。
??? 為保護(hù)那些提供字體給Windows和Windows NT的賣主的版權(quán),基于Win32的應(yīng)用程序總是列出所選擇字體的準(zhǔn)確名字。因?yàn)椴煌南到y(tǒng)會(huì)使用不同的字體,不要覺得所選擇字體就是要
求的字體。比如,假設(shè)要求名叫Palatino的字體,但系統(tǒng)沒提供那樣一種字體,則字體映射器將會(huì)以一種不同名但有類似屬性的字體取而代之。系統(tǒng)總是將用戶選擇的字體名報(bào)告出來。
??? 速查:Windows NT:3.1及以上版本號(hào);Windows:95及以上版本號(hào);Windows CE:不支持;頭文件:wingdi.h;庫文件:gdi32.lib;Unicode:在Windows NT環(huán)境下以Unicode和ANSI
兩種方式實(shí)現(xiàn)。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
