共用方式為


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 高度) 是字元儲存格高度值減去內部前導值。 字型對應程式會以下列方式解譯 nHeight 中指定的值。

價值觀 Meaning
> 0
字型對應程式會將此值轉換成裝置單位,並將其與可用字型的儲存格高度進行比對。
0
字型對應程式在搜尋相符專案時會使用預設高度值。
< 0
字型對應程式會將此值轉換成裝置單位,並將其絕對值與可用字型的字元高度進行比對。
 

針對所有高度比較,字型對應程式會尋找不超過要求大小的最大字型。

第一次使用字型時會發生此對應。

對於MM_TEXT對應模式,您可以使用下列公式來指定具有指定點大小的字型的高度:


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

[in] cWidth

所要求字型中字元的平均寬度 (以邏輯單位為單位)。 如果此值為零,字型對應程式會選擇最接近的相符值。 最接近的相符值是透過比較目前裝置的長寬比與可用字型的數位化長寬比之間差異的絕對值來確定的。

[in] cEscapement

擒縱向量與裝置 x 軸之間的角度,以十分之一度為單位。 擒縱向量平行於一排文字的基線。

當圖形模式設定為GM_ADVANCED時,您可以指定字串的擒縱角度,而與字串字元的方位角度無關。

當圖形模式設定為GM_COMPATIBLE時, nEscapement 會同時指定擒縱體和方向。 您應該將 nEscapementnOrientation 設定為相同的值。

[in] cOrientation

每個字元的基線與裝置 x 軸之間的角度 (以十分之一度為單位)。

[in] cWeight

字型的粗細範圍為 0 到 1000。 例如,400 是正常的,700 是粗體。 如果此值為零,則會使用預設權重。

為了方便起見,定義了以下值。

Weight 價值觀
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

[in] bItalic

如果設定為 TRUE,則指定斜體字型。

[in] bUnderline

如果設定為 TRUE,則指定底線字型。

[in] bStrikeOut

如果設定為 TRUE,則為刪除字型。

[in] iCharSet

字元集。 如需可能值的清單,請參閱 LOGFONT 結構lfCharSet 欄位。

作業系統中可能存在具有其他字元集的字型。 如果應用程式使用具有未知字元集的字型,則不應該嘗試翻譯或解譯使用該字型轉譯的字串。

為了確保在建立字型時結果一致,請勿指定 OEM_CHARSETDEFAULT_CHARSET。 如果您在 pszFaceName 參數中指定字體名稱,請確定 iCharSet 值符合 pszFaceName 中指定的字體字元集。

[in] iOutPrecision

輸出精確度。 輸出精確度定義了輸出必須與所請求字型的高度、寬度、字元方向、逃逸、間距和字型類型相符的程度。 它可以是下列其中一個值。

價值觀 Meaning
OUT_CHARACTER_PRECIS
未使用。
OUT_DEFAULT_PRECIS
預設字型對應程式行為。
OUT_DEVICE_PRECIS
指示字型對應程式在系統包含多個具有相同名稱的字型時選擇裝置字型。
OUT_OUTLINE_PRECIS
此值會指示字型對應程式從 TrueType 和其他外框型字型中進行選擇。
OUT_PS_ONLY_PRECIS
指示字體對應器僅從 PostScript 字體中進行選擇。 如果系統中沒有安裝 PostScript 字型,字型對應程式會回到預設行為。
OUT_RASTER_PRECIS
指示字型對應程式在系統包含多個相同名稱的字型時選擇點陣字型。
OUT_STRING_PRECIS
字型對應程式不會使用此值,但在列舉點陣字型時會傳回此值。
OUT_STROKE_PRECIS
字型對應程式不會使用此值,但會在列舉 TrueType、其他外框型字型和向量字型時傳回此值。
OUT_TT_ONLY_PRECIS
指示字體對應器僅從 TrueType 字體中進行選擇。 如果系統中未安裝 TrueType 字型,字型對應程式會回到預設行為。
OUT_TT_PRECIS
指示字型對應程式在系統包含多個相同名稱的字型時選擇 TrueType 字型。
 

應用程式可以使用 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

裁剪精度。 裁剪精確度會定義如何裁剪部分位於裁剪區域之外的字元。 它可以是下列一或多個值。

價值觀 Meaning
CLIP_CHARACTER_PRECIS
未使用。
CLIP_DEFAULT_PRECIS
指定預設裁剪行為。
CLIP_DFA_DISABLE
Windows XP SP1:關閉字型的字型關聯。 請注意,不保證此旗標對 Windows Server 2003 之後的任何平臺有任何影響。
CLIP_EMBEDDED
您必須指定此旗標,才能使用內嵌的唯讀字型。
CLIP_LH_ANGLES
使用此值時,所有字型的旋轉取決於座標系統的方向是左手還是右手。

如果不使用,裝置字型一律會逆時針旋轉,但其他字型的旋轉取決於座標系統的方向。

如需座標系統方向的詳細資訊,請參閱 nOrientation 參數的描述

CLIP_MASK
未使用。
CLIP_DFA_OVERRIDE
關閉字型的字型關聯。 這與CLIP_DFA_DISABLE相同,但在某些情況下可能會出現問題;建議使用的旗標是CLIP_DFA_DISABLE。
CLIP_STROKE_PRECIS
字型對應程式不會使用,但在列舉點陣、向量或 TrueType 字型時傳回。

為了相容性,列舉字型時一律會傳回此值。

CLIP_TT_ALWAYS
未使用。

[in] iQuality

輸出品質。 輸出品質會定義 GDI 必須嘗試將邏輯字型屬性與實際實體字型的屬性比對的謹慎程度。 它可以是下列其中一個值。

價值觀 Meaning
ANTIALIASED_QUALITY
字型會抗鋸齒或平滑化,如果字型支援它,且字型大小不會太小或太大。
CLEARTYPE_QUALITY
如果設定,則會使用 ClearType 反鋸齒方法轉譯文字 (如果可能)。 如需詳細資訊,請參閱備註。
DEFAULT_QUALITY
字體的外觀並不重要。
DRAFT_QUALITY
字型的外觀不如使用PROOF_QUALITY值時重要。 針對 GDI 點陣字型,會啟用縮放比例,這表示有更多字型大小可用,但品質可能會較低。 如有必要,會合成粗體、斜體、底線和刪除線字體。
NONANTIALIASED_QUALITY
字體永遠不會消除鋸齒,也就是說,字體平滑化不會完成。
PROOF_QUALITY
字型的字元品質比邏輯字型屬性的精確比對更重要。 針對 GDI 點陣字型,會停用縮放比例,並選擇大小最接近的字型。 雖然所選字體大小在使用PROOF_QUALITY時可能無法準確映射,但字體品質高,外觀不失真。 如有必要,會合成粗體、斜體、底線和刪除線字體。
 

如果輸出品質為 DEFAULT_QUALITY、DRAFT_QUALITY 或 PROOF_QUALITY,則如果SPI_GETFONTSMOOTHING系統參數為 TRUE,則字型會消除鋸齒。 使用者可以從控制面板控制此系統參數。 (控制面板中設定的精確措辭取決於 Windows 版本,但將是「平滑螢幕字體邊緣」的文字。

[in] iPitchAndFamily

字體的音高和族。 兩個低階位指定字型的間距,可以是下列其中一個值:

  • DEFAULT_PITCH
  • FIXED_PITCH
  • VARIABLE_PITCH
四個高位會指定字型系列,而且可以是下列其中一個值。
價值觀 Meaning
FF_DECORATIVE
新奇字體。 古英語就是一個例子。
FF_DONTCARE
使用預設字型。
FF_MODERN
具有恆定筆畫寬度的字體,有或沒有襯線。 Pica、Elite 和 Courier New 就是例子。
FF_ROMAN
具有可變筆畫寬度和襯線的字體。 MS Serif 就是一個例子。
FF_SCRIPT
設計成看起來像手寫字體的字體。 Script 和 Cursive 就是例子。
FF_SWISS
具有可變筆畫寬度且無襯線的字體。 女士?無襯線字體就是一個例子。
 

應用程式可以使用布林值 OR 運算子,將間距常數與族系常數聯結,以指定 fdwPitchAndFamily 參數的值。

字體系列以一般方式描述字體的外觀。 它們旨在在請求的確切字體不可用時指定字體。

[in] pszFaceName

以 Null 結尾字串的指標,指定字型的字體名稱。 此字串的長度不得超過 32 個字元,包括終止的空值字元。 EnumFontFamilies 函式可用來列舉所有目前可用字型的字體名稱。 如需詳細資訊,請參閱備註。

如果 pszFaceNameNull 或空字串,GDI 會使用符合其他指定屬性的第一個字型。

傳回值

如果函式成功,傳回值是邏輯字型的控制碼。

如果函式失敗,傳回值為 NULL。

備註

當您不再需要字體時,請呼叫 DeleteObject 函數將其刪除。

為了協助保護提供 Windows 字型的廠商版權,應用程式應該一律報告所選字型的確切名稱。 因為可用的字型可能因系統而異,所以不要假設選取的字型一律與要求的字型相同。 例如,如果您要求名為 Palatino 的字型,但系統上沒有這類字型,則字型對應程式會取代具有類似屬性但名稱不同的字型。 一律向使用者報告所選字型的名稱。

若要在不同語言版本的 OS 上取得適當的字型,請在 LOGFONT 結構中使用所需的字型特性呼叫 EnumFontFamiliesEx,然後擷取適當的字體名稱,並使用 CreateFontCreateFontIndirect 建立字型。

CreateFontCreateFontIndirectCreateFontIndirectEx 的字型對應程式會辨識英文和當地語系化字體名稱,而不論地區設定為何。

下列情況不支援 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

另請參閱

CreateFont間接

CreateFontIndirectEx

刪除物件

列舉字體系列

列舉字體FamiliesEx

列舉字型

字體和文字功能

字體和文字概觀

LOGFONT 字體

選取物件