CreateFontA 函式 (wingdi.h)
CreateFont 函式會建立具有指定特性的邏輯字型。 邏輯字型隨後可以選取為任何裝置的字型。
語法
HFONT CreateFontA(
[in] int cHeight,
[in] int cWidth,
[in] int cEscapement,
[in] int cOrientation,
[in] int cWeight,
[in] DWORD bItalic,
[in] DWORD bUnderline,
[in] DWORD bStrikeOut,
[in] DWORD iCharSet,
[in] DWORD iOutPrecision,
[in] DWORD iClipPrecision,
[in] DWORD iQuality,
[in] DWORD iPitchAndFamily,
[in] LPCSTR pszFaceName
);
參數
[in] cHeight
字型字元儲存格或字元的高度,以邏輯單位表示。 字元高度值 (也稱為 em height) 是字元儲存格高度值減去內部前置值。 字型對應程式會以下列方式解譯 nHeight 中指定的值。
值 | 意義 |
---|---|
|
字型對應程式會將此值轉換成裝置單位,並將其與可用字型的單元格高度相符。 |
|
字型對應程式會在搜尋相符專案時使用預設高度值。 |
|
字型對應程式會將此值轉換成裝置單位,並將其絕對值與可用字型的字元高度相符。 |
對於所有高度比較,字型對應程式會尋找未超過要求大小的最大字型。
第一次使用字型時,就會發生此對應。
針對MM_TEXT對應模式,您可以使用下列公式來指定具有指定點大小的字型高度:
nHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
[in] cWidth
要求字型中字元的平均寬度,以邏輯單位表示。 如果此值為零,字型對應程式會選擇最接近的相符值。 最接近的比對值是藉由比較目前裝置外觀比例與可用字型數字外觀比例之間的差異絕對值來決定。
[in] cEscapement
逸出向量與裝置 X 軸之間的角度,以十分之一度為單位。 逸出向量與文字列的基底線平行。
當圖形模式設定為GM_ADVANCED時,您可以指定字串的逸出角度,而不受字串字元的方向角度。
當圖形模式設定為 GM_COMPATIBLE 時, nEscapement 會同時指定逸出和方向。 您應該將 nEscapement 和 nOrientation 設定為相同的值。
[in] cOrientation
每一個字元的基底線與裝置 X 軸之間的角度,以十分之一度為單位。
[in] cWeight
範圍 0 到 1000 的字型粗細。 例如,400 是正常的,而 700 是粗體。 如果此值為零,則會使用預設權數。
為了方便起見,定義了下列值。
[in] bItalic
如果設定為 TRUE,則指定斜體字型。
[in] bUnderline
如果設定為 TRUE,則指定加底線字型。
[in] bStrikeOut
如果設定為 TRUE,則為刪除線字型。
[in] iCharSet
字元集。 下列是預先定義的值:
- 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
- VIETNAMESE_CHARSET
- JOHAB_CHARSET
- ARABIC_CHARSET
- HEBREW_CHARSET
- THAI_CHARSET
DEFAULT_CHARSET會根據目前的系統地區設定,設定為值。 例如,當系統地區設定為英文 (美國) 時,它會設定為 ANSI_CHARSET。
具有其他字元集的字型可能存在於操作系統中。 如果應用程式使用具有未知字元集的字型,則不應該嘗試翻譯或解譯以該字型轉譯的字串。
若要確保建立字型時的結果一致,請勿指定OEM_CHARSET或DEFAULT_CHARSET。 如果您在 lpszFace 參數中指定字樣名稱,請確定 fdwCharSet 值符合 lpszFace 中指定的字樣字元集。
[in] iOutPrecision
輸出有效位數。 輸出有效位數會定義輸出必須符合要求字型的高度、寬度、字元方向、逸出、音調和字型類型有多接近。 它可以是下列值之一。
應用程式可以使用OUT_DEVICE_PRECIS、OUT_RASTER_PRECIS、OUT_TT_PRECIS和OUT_PS_ONLY_PRECIS值來控制當操作系統包含多個具有指定名稱的字型時,字型對應程式如何選擇字型。 例如,如果操作系統在點陣和 TrueType 窗體中包含名為 Symbol 的字型,則指定OUT_TT_PRECIS會強制字型對應程式選擇 TrueType 版本。 指定OUT_TT_ONLY_PRECIS會強制字型對應程序選擇 TrueType 字型,即使它必須取代另一個名稱的 TrueType 字型也一樣。
[in] iClipPrecision
裁剪精確度。 裁剪精確度會定義如何裁剪部分超出裁剪區域的字元。 它可以是下列一或多個值。
[in] iQuality
輸出品質。 輸出品質會定義 GDI 必須嘗試將邏輯字型屬性與實際實體字型屬性相符的方式。 它可以是下列值之一。
如果輸出品質是DEFAULT_QUALITY、DRAFT_QUALITY或PROOF_QUALITY,則如果SPI_GETFONTSMOOTHING系統參數為 TRUE,則會反鋸齒字型。 用戶可以從 控制台 控制這個系統參數。 ([控制面板] 中設定的精確字組取決於 Windows 版本,但它會是「平滑螢幕字型邊緣」效果的字組。)
[in] iPitchAndFamily
字型的音調和系列。 兩個低序位會指定字型的音調,而且可以是下列其中一個值:
- DEFAULT_PITCH
- FIXED_PITCH
- VARIABLE_PITCH
應用程式可以使用布爾值 OR 運算符,將間距常數與系列常數聯結,以指定 fdwPitchAndFamily 參數的值。
字型系列會以一般方式描述字型的外觀。 當要求的確切字型無法使用時,這些字型是用於指定字型。
[in] pszFaceName
指定字型之以 Null 結尾字串的指標。 此字串的長度不能超過 32 個字元,包括終止的 Null 字元。 EnumFontFamilies 函式可用來列舉所有目前可用字型的字型名稱。 如需詳細資訊,請參閱<備註>一節。
如果 lpszFace 為 NULL 或空字串,GDI 會使用符合其他指定屬性的第一個字型。
傳回值
如果函式成功,則傳回值是邏輯字型的句柄。
如果函式失敗,則傳回值為 NULL。
備註
當您不再需要字型時,請呼叫 DeleteObject 函式來刪除它。
為了協助保護為 Windows 提供字型的廠商著作權,應用程式應該一律報告所選字型的確切名稱。 由於可用的字型可能會因系統而異,因此請勿假設選取的字型一律與要求的字型相同。 例如,如果您要求名為Pala才能使用的字型,但系統上沒有這類字型,字型對應器會取代具有類似屬性但不同名稱的字型。 一律向使用者報告選取的字型名稱。
若要在不同的操作系統語言版本上取得適當的字型,請使用LOGFONT結構中所需的字型特性呼叫EnumFontFamiliesEx,然後使用 CreateFont 或 CreateFontIndirect 擷取適當的字型名稱並建立字型。
不論地區設定為何, CreateFont、CreateFontIndirect和 CreateFontIndirectEx 的字型對應程式都會辨識英文和本地化的字樣名稱。
下列情況不支援 ClearType 反鋸齒:
- 在印表機上轉譯的文字。
- 256 種色彩或更少色彩的顯示集。
- 轉譯至終端伺服器用戶端的文字。
- 字型不是 TrueType 字型或具有 TrueType 外框的 OpenType 字型。 例如,下列專案不支援 ClearType 反鋸齒:類型 1 字型、沒有 TrueType 外框、位圖字型、向量字型和裝置字型的 Postscript OpenType 字型。
- 字型已微調內嵌位圖,僅適用於包含內嵌位圖的字型大小。 例如,這通常發生在東亞字型中。
範例
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_PAINT:
{
RECT rect;
HFONT hFontOriginal, hFont1, hFont2, hFont3;
hdc = BeginPaint(hWnd, &ps);
//Logical units are device dependent pixels, so this will create a handle to a logical font that is 48 pixels in height.
//The width, when set to 0, will cause the font mapper to choose the closest matching value.
//The font face name will be Impact.
hFont1 = CreateFont(48,0,0,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
CLIP_DEFAULT_PRECIS,CLEARTYPE_QUALITY, VARIABLE_PITCH,TEXT("Impact"));
hFontOriginal = (HFONT)SelectObject(hdc, hFont1);
//Sets the coordinates for the rectangle in which the text is to be formatted.
SetRect(&rect, 100,100,700,200);
SetTextColor(hdc, RGB(255,0,0));
DrawText(hdc, TEXT("Drawing Text with Impact"), -1,&rect, DT_NOCLIP);
//Logical units are device dependent pixels, so this will create a handle to a logical font that is 36 pixels in height.
//The width, when set to 20, will cause the font mapper to choose a font which, in this case, is stretched.
//The font face name will be Times New Roman. This time nEscapement is at -300 tenths of a degree (-30 degrees)
hFont2 = CreateFont(36,20,-300,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
CLIP_DEFAULT_PRECIS,CLEARTYPE_QUALITY, VARIABLE_PITCH,TEXT("Times New Roman"));
SelectObject(hdc,hFont2);
//Sets the coordinates for the rectangle in which the text is to be formatted.
SetRect(&rect, 100, 200, 900, 800);
SetTextColor(hdc, RGB(0,128,0));
DrawText(hdc, TEXT("Drawing Text with Times New Roman"), -1,&rect, DT_NOCLIP);
//Logical units are device dependent pixels, so this will create a handle to a logical font that is 36 pixels in height.
//The width, when set to 10, will cause the font mapper to choose a font which, in this case, is compressed.
//The font face name will be Arial. This time nEscapement is at 250 tenths of a degree (25 degrees)
hFont3 = CreateFont(36,10,250,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY, VARIABLE_PITCH,TEXT("Arial"));
SelectObject(hdc,hFont3);
//Sets the coordinates for the rectangle in which the text is to be formatted.
SetRect(&rect, 500, 200, 1400, 600);
SetTextColor(hdc, RGB(0,0,255));
DrawText(hdc, TEXT("Drawing Text with Arial"), -1,&rect, DT_NOCLIP);
SelectObject(hdc,hFontOriginal);
DeleteObject(hFont1);
DeleteObject(hFont2);
DeleteObject(hFont3);
EndPaint(hWnd, &ps);
break;
}
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
如需另一個範例,請參閱 使用功能表設定 Menu-Item 文字字串的字型。
注意
wingdi.h 標頭會將 CreateFont 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 專業版 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | wingdi.h (包含 Windows.h) |
程式庫 | Gdi32.lib |
Dll | Gdi32.dll |
另請參閱
EnumFontFamilies