示例:
1.更改靜態樣式的ID,例如IDC_STATIC1。
2.添加壹個編輯控件並建立壹個關聯控件m_editControl。
3.在OnInitDialog中添加以下代碼:
CFont * f;
f =新CFont
f-& gt;CreateFont(16,//n高度
0,//n寬度
0,// nEscapement
0,//n方向
FW_BOLD,//NW weight
TRUE,// bItalic
FALSE,// bUnderline
0,// cStrikeOut
ANSI_CHARSET,// nCharSet
OUT_DEFAULT_PRECIS,// nOutPrecision
CLIP_DEFAULT_PRECIS,// nClipPrecision
默認質量,//n質量
DEFAULT_PITCH | FF_SWISS,// nPitchAndFamily
_ T(" Arial "));// lpszFac
m_editControlset font(f);
M_editControlSetWindowText("請教專家");
GetDlgItem(IDC _ static 1)-& gt;set font(f);
運行結果如下圖所示。下載完整示例CtrlFont.zip。
應該註意,這裏使用的是CFont指針,而不是普通的CFont局部變量。如果程序更改為以下內容:
CFont f;
f.CreateFont(16,//n高度
0,//n寬度
0,// nEscapement
0,//n方向
FW_BOLD,//NW weight
TRUE,// bItalic
FALSE,// bUnderline
0,// cStrikeOut
ANSI_CHARSET,// nCharSet
OUT_DEFAULT_PRECIS,// nOutPrecision
CLIP_DEFAULT_PRECIS,// nClipPrecision
默認質量,//n質量
DEFAULT_PITCH | FF_SWISS,// nPitchAndFamily
_ T(" Arial "));
m_editControlset font(& amp;f);
M_editControlSetWindowText("請教專家");
GetDlgItem(IDC _ static 1)-& gt;set font(& amp;f);
運行後得不到想要的效果,因為CFont f會在OnInitDialog函數執行後被清除。在對話框關閉之前,必須確保SetFont設置的font對象有效。因此,通常使用指針或類成員來保存已建立的字體對象。
對於非MFC程序,首先用CreateFont創建壹個字體句柄,然後用SendMessage向控件WM_SETFONT發送壹條消息,並分配已建立的字體句柄。
CHeight是字體的高度。
CWidth是字體的寬度。
CEscapement是字體的傾斜角度。
COrientation是字體的傾斜角度。
CWeight是字體的粗細。
BItalic是字體是否為斜體。
BUnderline是字體是否加下劃線。
BStrikeOut是字體是否有刪除線。
ICharSet是字體使用的字符集。
IOutPrecision是指定如何選擇合適的字體。
IClipPrecision用於確定切割的精度。
iQuality如何匹配選中的字體?
IPitchAndFamily是壹個間隔符號,也是壹個屬性符號。
PszFaceName是字體的名稱。
CreateFont()函數的MSDN翻譯
功能:這個功能創建壹個特殊的邏輯字體,以後任何設備都可以選擇。
函數原型:HFONT CreateFont(int nHeight,
int nWidth,
內部景觀,
營養,
int fnWeight,
DWORD fdwltalic,
DWORD fdwUnderline,
DWORD fdwStrikeOut,
DWORD fdwCharSet,
DWORD fdwOutputPrecision,
DWORD fdwClipPrecision,
DWORD fdwQuality,
DWORD fdwPitchAndFamily,
LPCTSTR lpsz face);
參數:
NHeight:指定字體的字符單位或邏輯單位高度。字符的高度值(也稱為em height)是指字符單位高度值減去內部標頭值。字體映射器以下列方式解釋nHeight指定的值,每個值表示:
& gt0:字體映射器將此值轉換為設備單位,並匹配現有字體的單位高度。
0:字體映射器轉換在選擇匹配項時使用默認高度值。
& lt0:字體映射器將該值轉換為設備單位,並將其絕對值與現有字體的字符高度相匹配。
比較所有高度,字體映射器選擇不超過所需大小的最大字體。
首次使用該字體時會出現這種映射。
對於MM_TEXT映射模式,以下公式可用於確定具有指定點大小的字體的高度:
nHeight=-MulDiv(PointSize,GetDeviceCaps(hDC,LOGPIXELSY),72)
NWidth:指定所需字體中字符邏輯單元的平均寬度。如果該值為0,字體映射器選擇最接近的匹配值,該值通過比較當前設備的特征系數和可用字體的數字化特征系數之間的差的絕對值來確定。
N escape:指定位移向量和設備的X軸之間的角度,以十分之壹度為單位。位移矢量平行於法線的基線。
Windows NT:當圖形設備設置為GM_ADVANCED時,可以指定字符串的偏移角度,而不依賴於字符串中字符的定位角度。
當圖形模式設置為GM_COMPATIBLE時,nEscapement指定位移角度和定位角度,您可以將nEscapement和nOrientation設置為相同的值。
Windows 95: n escape指定位移角度和定位角度,您可以將n escape和nOrientation設置為相同的值。
NOrientation:指定每個字符的基線與設備的X軸之間的角度。
FnWeight:在0到1000之間指定字體的粗細,如標準字體為400,黑色字體為700。如果該值為0,將使用默認權重。
為了便於定義,可以使用以下值:
FW _ dont care:0;FW _ THIN100;FW _ EXTRALIGHT200;FW _ ULTRALIGHT200;FW _ LIGHT300;
FW _ NORMAL:400;FW _常規;400;FW _ MEDIUM500;FW _ SEMIBOLD600;FW _ DEMIBOLD600;
FW _ BOLD:700;FW _ EXTRABOLD800;FW _ ULTRABOLD800;FW _ HEAVY900;FW _ BLACK900。
FdwItalic:如果設置為TRUE,則指定斜體。
FdwUnderline:如果設置為TRUE,則指定帶下劃線的單詞。
FdwStrikeOut:如果設置為TRUE,刪除線指定字體。
FdwCharSet:指定字符集,預定義了以下值:
ANSI _ CHARSET波羅的海字符集;CHINESEBIG5 _ CHARSET默認_字符集;
東歐_字符集;GB 2312 _ CHARSET;GREEK _ CHARSETHANGUL _ CHARSETMAC _ CHARSETOEM _ CHARSET俄語_字符集;SHIFTJIS _ CHARSET
SYMBOL _ CHARSET土耳其字符集.
韓國Windows:JOHAB _ charset;
中東的windows:Hebrew _ charset;阿拉伯語_字符集
泰國的windows:Thailand _ charset
OEM_CHARSET指定的字符集與操作系統相關。
您可以使用DEFAULT_CHARSET值來允許字體的名稱和大小完全描述邏輯字體。如果指定的字體名稱不存在,任何字符集的字體都可以替換指定的字體,因此應該小心使用DEFAULT_CHARSET以避免意外的結果。
操作系統中存在其他字符集的字體。如果應用程序使用未知字符集的字體,該應用程序將不會嘗試翻譯或解釋以該字體書寫的字符串。
該參數在字體映射過程中很重要。為確保結果壹致,請指定特殊字符集。如果在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字體或vector字體時用作返回值。
OUT_TT_ONLY_PRECIS:指示字體映射器僅選擇TrueType字體。如果系統中沒有安裝TrueType字體,字體映射將返回到默認狀態。、
OUT_TT_PRECIS:當系統中有多個同名字體時,指示字體映射器選擇TrueType字體。
當操作系統包含多個與指定名稱同名的字體時,應用程序可以使用out _ device _ precis、out _ raster _ precis和OUT_TT_PRECIS的值來控制字體映射器如何選擇字體。例如,如果操作系統包含兩種字體,即raster和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:使用該值時,所有字體的旋轉取決於坐標系是向左還是向右。
如果不使用該值,設備字體總是逆時針旋轉,但其他字體的旋轉取決於坐標系的方向。有關坐標系方向的更多信息,請參見參數方向。
CLIP_TT_ALWAYS:未使用。
FdwQuality:指的是輸出質量,它定義了GDI如何仔細匹配邏輯字體屬性和實際物理字體屬性。它可以取下列值之壹:
DEFAULT_QUALITY:字體的外觀不重要。
DRAFT_QUALITY:字體外觀的重要性僅次於使用PROOF_QUALITY。對於GDI光柵字體,縮放比例是活動的,也就是說有很多字體大小可以選擇,但是質量可能不高。如果需要,粗體、斜體、下劃線和刪除線字體可以壹起使用。
PROOF_QUALITY:字符質量比精確匹配邏輯字體的字體屬性更重要。對於GDI掃描字體,縮放處於活動狀態,並選擇最接近的大小。雖然在使用PROOF_QUALITY時,選擇的字體大小不完全匹配,但是字體的質量很高,外觀上沒有失真。如果需要,粗體、斜體、下劃線和刪除線字體可以壹起使用。
FdwPitchAndFamily:指定字體間距和字體系列,下面兩位數字指定字體的字符間距,可以取下列值之壹:
默認_音高;固定_間距;可變螺距
高端四位數指定字體系列,可以取下列值之壹:
FF_DECORATIVE:字體新穎,比如古英語。FF_DONTCARE:不關心或者不知道。
FF_MDERN:固定筆畫寬度的字體,帶或不帶襯線。如Pica、Elite和Courier New。
可變筆畫寬度和襯線的字體。比如MS Serif。
FF_SCRIPT:設計成看起來像手寫的字體。例如手寫體和草書。
FF_SWISS:筆畫寬度可變,無斜線的字體。比如MS Sans Serif。