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 高度) 是字元儲存格高度值減去內部前導值。 字型對應程式會以下列方式解譯 nHeight 中指定的值。
| 價值觀 | Meaning |
|---|---|
|
字型對應程式會將此值轉換成裝置單位,並將其與可用字型的儲存格高度進行比對。 |
|
字型對應程式在搜尋相符專案時會使用預設高度值。 |
|
字型對應程式會將此值轉換成裝置單位,並將其絕對值與可用字型的字元高度進行比對。 |
針對所有高度比較,字型對應程式會尋找不超過要求大小的最大字型。
第一次使用字型時會發生此對應。
對於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
字元集。 如需可能值的清單,請參閱 LOGFONT 結構的 lfCharSet 欄位。
作業系統中可能存在具有其他字元集的字型。 如果應用程式使用具有未知字元集的字型,則不應該嘗試翻譯或解譯使用該字型轉譯的字串。
為了確保在建立字型時結果一致,請勿指定 OEM_CHARSET 或 DEFAULT_CHARSET。 如果您在 pszFaceName 參數中指定字體名稱,請確定 iCharSet 值符合 pszFaceName 中指定的字體字元集。
[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 個字元,包括終止的空值字元。 EnumFontFamilies 函式可用來列舉所有目前可用字型的字體名稱。 如需詳細資訊,請參閱備註。
如果 pszFaceName 是 Null 或空字串,GDI 會使用符合其他指定屬性的第一個字型。
傳回值
如果函式成功,傳回值是邏輯字型的控制碼。
如果函式失敗,傳回值為 NULL。
備註
當您不再需要字體時,請呼叫 DeleteObject 函數將其刪除。
為了協助保護提供 Windows 字型的廠商版權,應用程式應該一律報告所選字型的確切名稱。 因為可用的字型可能因系統而異,所以不要假設選取的字型一律與要求的字型相同。 例如,如果您要求名為 Palatino 的字型,但系統上沒有這類字型,則字型對應程式會取代具有類似屬性但名稱不同的字型。 一律向使用者報告所選字型的名稱。
若要在不同語言版本的 OS 上取得適當的字型,請在 LOGFONT 結構中使用所需的字型特性呼叫 EnumFontFamiliesEx,然後擷取適當的字體名稱,並使用 CreateFont 或 CreateFontIndirect 建立字型。
CreateFont、CreateFontIndirect 和 CreateFontIndirectEx 的字型對應程式會辨識英文和當地語系化字體名稱,而不論地區設定為何。
下列情況不支援 ClearType 反鋸齒:
- 在印表機上轉譯的文字。
- 顯示設置為 256 種或更少顏色。
- 轉譯至終端機伺服器用戶端的文字。
- 字型不是 TrueType 字型或具有 TrueType 外框的 OpenType 字型。 例如,下列專案不支援 ClearType 消除鋸齒:Type 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 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的
需求
| Requirement | 價值觀 |
|---|---|
| 最低支援的用戶端 | Windows 2000 Professional [僅限傳統型應用程式] |
| 支援的最低伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
| 目標平臺 | 窗戶 |
| Header | wingdi.h (包括 Windows.h) |
| Library | Gdi32.lib |
| DLL檔案 | Gdi32.dll |
另請參閱
列舉字體系列