共用方式為


CreateFontW 函式 (wingdi.h)

CreateFont 函式會建立具有指定特性的邏輯字型。 邏輯字型隨後可以選取為任何裝置的字型。

語法

HFONT CreateFontW(
  [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] LPCWSTR pszFaceName
);

參數

[in] cHeight

字型字元儲存格或字元的高度,以邏輯單位表示。 字元高度值 (也稱為 em height) 是字元儲存格高度值減去內部前置值。 字型對應程式會以下列方式解譯 nHeight 中指定的值。

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

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

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

針對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 是粗體。 如果此值為零,則會使用預設權數。

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

重量 價值
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

字元集。 下列值是預先定義的:

  • 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
韓文版本的 Windows:
  • JOHAB_CHARSET
中東語言版本的 Windows:
  • ARABIC_CHARSET
  • HEBREW_CHARSET
泰文版本的 Windows:
  • THAI_CHARSET
OEM_CHARSET值會指定作系統相依的字元集。

DEFAULT_CHARSET會根據目前的系統地區設定設定值。 例如,當系統地區設定是英文 (美國),則會設定為 ANSI_CHARSET。

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

若要確保建立字型時的結果一致,請勿指定OEM_CHARSET或DEFAULT_CHARSET。 如果您在 lpszFace 參數中指定字樣名稱,請確定 fdwCharSet 值符合 lpszFace中指定的字樣字元集。

[in] iOutPrecision

輸出有效位數。 輸出精確度定義輸出必須符合所要求字型的高度、寬度、字元方向、逸出器、音調和字型類型的程度。 它可以是下列其中一個值。

價值 意義
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

裁剪精確度。 裁剪精確度定義如何裁剪部分超出裁剪區域的字元。 它可以是下列其中一或多個值。

價值 意義
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 必須嘗試將邏輯字型屬性與實際實體字型屬性相符的方式。 它可以是下列其中一個值。

價值 意義
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
四個高序位會指定字型系列,而且可以是下列其中一個值。
價值 意義
FF_DECORATIVE
新奇字型。 舊英文是一個例子。
FF_DONTCARE
使用預設字型。
FF_MODERN
具有常數筆劃寬度的字型,具有或不含 serifs。 Pica、Elite 和 Courier New 是範例。
FF_ROMAN
具有可變筆劃寬度和 Serifs 的字型。 MS Serif 是範例。
FF_SCRIPT
設計為看起來像手寫的字型。 腳本和 Cursive 是範例。
FF_SWISS
具有可變筆劃寬度且不含 serifs 的字型。 女士?Sans Serif 是一個例子。
 

應用程式可以使用布爾值 OR 運算符,將 fdwPitchAndFamily 參數的值,聯結成系列常數的間距常數。

字型系列以一般方式描述字型的外觀。 當要求的確切字樣無法使用時,這些字型是用來指定字型。

[in] pszFaceName

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

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

傳回值

如果函式成功,傳回值就是邏輯字型的句柄。

如果函式失敗,則傳回值 NULL

言論

當您不再需要字型時,請呼叫 DeleteObject 函式加以刪除。

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

若要在作系統的不同語言版本上取得適當的字型,請呼叫 EnumFontFamiliesExLOGFONT 結構中所需的字型特性,然後 擷取適當的字型名稱,並使用 createFontCreateFontIndirect來建立字型。

CreateFont的字型對應程式、CreateFontIndirectCreateFontIndirectEx 可辨識英文和當地語系化字樣名稱,而不論地區設定為何。

下列情況不支援 ClearType 反鋸齒:

  • 在印表機上呈現的文字。
  • 256 種色彩或更少色彩的顯示集。
  • 轉譯至終端伺服器用戶端的文字。
  • 字型不是 TrueType 字型或具有 TrueType 外框的 OpenType 字型。 例如,下列不支援 ClearType 反鋸齒:類型 1 字型、Postscript OpenType 字型,不含 TrueType 外框、位圖字型、向量字型和裝置字型。
  • 字型已微調內嵌位圖,僅適用於包含內嵌位圖的字型大小。 例如,這通常發生在東亞字型中。

例子

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 Professional [僅限傳統型應用程式]
支援的最低伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平臺 窗戶
標頭 wingdi.h (包括 Windows.h)
連結庫 Gdi32.lib
DLL Gdi32.dll

另請參閱

CreateFontIndirect

CreateFontIndirectEx

DeleteObject

EnumFontFamilies

EnumFontFamiliesEx

EnumFonts

字型和文字函式

字型和文字概觀

LOGFONT

SelectObject