日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

windows字体

發布時間:2023/12/10 windows 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 windows字体 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.建立字體handle

請先看CreateFont函數的原型:

HFONT hFont = CreateFont(int nHeight, //字體高度 int nWidth, //字體寬度 int nEscapement, //字體斜度 int nOrientation, //底線斜度 int fnWeight, //字體粗細 DWORD fdwItalic, //設定字體為斜體 DWORD fdwUnderline, //設定字體底線 DWORD fdwStrikeOut, //設定刪線 DWORD fdwCharSet, //設定字符集 DWORD fdwOutputPrecision, //字體輸出精度 DWORD fdwClipPrecision, //字型剪切精度 DWORD fdwQuality, //字體輪廓質量 DWORD fdwPitchAndFamily, //字體的外觀參考(沒有所需字體時用) LPCTSTR lpszFace //字體名稱 );

真嚇人,共有十四個參數,盡管你能記得設定字體要有哪些參數,但你也未必能記清楚每個參數的位置。CreateFont函數會傳回HFONT字體handle,這是最直接、最快、算是最易用的字體函數了。

當中,字體高度和寬度是電腦邏輯長度,可用以下公式計算:

nHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);

當中PointSize就是字體的大小(這數字就是在Microsoft Word中設定字體大小的數字)。

你亦可跟隨Charles Petzold的計算方法,不過會比以上方法較復雜難明,但這方法也是最準確的方法(能準確計算字體的邏輯高度):

FontSize = 120; //即12 points,Microsoft Word的預設字體大小 hFont = CreateFont( -(int)(fabs(FontSize*GetDeviceCaps(hdc,LOGPIXELSY)/72)/10.0+0.5), 0,0,0,500,FALSE,FALSE,FALSE,0,0,0,0,0,"標楷體"); //建立字體 SelectObject(hdc,hFont); //令HDC選擇字體 TextOut(hdc,100,100,"標楷體12點字體",8); DeleteObject(SelectObject(hdc,hFont);

從以上例子可見,我們建立了十二點、中等粗細、非斜體、沒加底線、沒加刪線的「標楷體」向量字型,利用 (點數 x 10 x 系統邏輯高度 / 72 + 0.5) 的絕對整數值 這公式就能計算字體的實際顯示大小。

另外,我們利用SelectObject來載入字體handle,以后的文字輸出均以該字體顯示,直至DeleteObject為止,我們絕大部份時間都以上述程式碼來設定字體。

第二種呼叫字體的方法

我們有CreateFont函數,亦有CreateFontIndirect函數來間接建立字體,但別以為這函數能簡化你呼叫字體的步驟,這函數只可讓你填入字體的外觀資料到LOGFONT結構體,才建立字體,而不需直接把十四個參數輸入CreateFont,先看看LOGFONT結構:

LOGFONT {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結構中,把資料填入這結果,然后呼叫CreateFontIndirect就行了:

LOGFONT lf; HFONT hFont; ... ... // 填入字體資料于LOGFONT結構中 hFont = CreateFontIndirect(&lf);

LOGFONT結構詳解

在此,我們不妨說說LOGFONT結構。剛才也說明過lfHeight是邏輯高度,而lfWidth就是邏輯寬度,需要呼叫GetDeviceCaps來取得屏幕的DPI(每一吋有多少pixel),通常我們都會把lfWidth置零,置零代表字體寬度會跟隨lfHeight來調整,以取得最合適最美觀的長寬比例,當然你也可以自行設定lfWidth。

lfEscapement是字體斜度,以0.1度位單位,這角度是escapement vector和X軸的角度,而escapement vector是平行于底線的。與lfEscapement一樣,lfOrientation也是設定斜度,應與lfEscapement的設定值一樣(但在Windows NT/2000上,若繪圖模式被設定為GM_ADVANCED,Orientation和Escapement是兩回事,由于涉及復雜計計算,在此不作詳談)。

lfWeight是字體粗細,由0至900,其設定值必需為100的倍數,一般來說400是正常粗細,而700就是粗體,若該值設為0則代表以預計粗細顯示文字。

隨后的三個值lfItalic、lfUnderline、lfStrikeOut就是Microsoft Word讓使用者設定為斜體、加底線和加刪線的功能,填入TRUE則開啟選項,FALSE則關閉。

lfCharSet則讓人設定字元集,例如我們想顯示簡體字,就會設定為GB2312_CHARSET,希臘符號就設定為SYMBOL_CHARSET,大五碼為CHINESEBIG5_CHARSET,ANSI為ANSI_CHARSET等等,若本值設零則為DEFAULT_CHARSET,預設值在中文視窗中是CHINESEBIG5_CHARSET。

lfOutPrecision是設定字型顯示的精確度,當大家設定了繁體的字體斜度粗細之后,精密的raster operation總會有點差錯,這些差錯可以靠修正部份字體設定來減輕,但不能消除,這時候你要決定舍棄字體的輪廓還是清晰度。因為我們用的都是TTF,所以我們都會把此值設為0,在TTF的世界不需要考慮字型會失真。

lfClipPrecision是設定部份字型被其他圖像或框架覆蓋時的顯示精確度,和lfOutPrecision一樣,我們一般都把此值設0。

lfQuality就關系到TTF,這是決定GDI處理字體顯示的精確度,與字體的性質無關,在大部份情況也會設0代表使用預設值,我們也可設為PROOF_QUALITY使字體顯示更精確,但運算時間也較長;你也可算擇DRAFT_QUALITY來取得最乎合比例的字型,運算時間亦較短(別以為字體的運算時間是多不重要,大家用過Windows 2000的Notepad后就會認同我這番話)。

lfPitchAndFamily設定字型的端點和字系,假若你所選擇的字體并未能在你的電腦上找到,這個參數就會找出補充語系來顯示所需文字。

請留意,絕大部份情況下,我們都不需要刻意設定lfCharSet、lfOutPrecision、lfClipPrecision、lfQuality和lfPitchAndFamily,我們把它設為0或預計值便可?
?

總結

以上是生活随笔為你收集整理的windows字体的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。