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

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

Weight OEM_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

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

如果輸出品質是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 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例