共用方式為


字型建立和選取

字型 通用對話框可簡化建立和選取字型的程式。 藉由初始化 CHOOSEFONT 結構,並呼叫 CHOOSEFONT 函式,應用程式可以支援先前需要許多自定義程式代碼行的相同字型選擇介面。 (如需 字型 通用對話框的詳細資訊,請參閱 通用對話框庫

依用戶選取

大部分的字型建立和選取作業都牽涉到使用者。 例如,文字處理應用程式可讓用戶選取標題、腳註和本文的唯一字型。 當使用者使用 [字型] 對話框選取字型並按下 [OK] 按鈕之後,CHOOSEFONT 函式會使用所要求字型的屬性,初始化 LOGFONT 結構的成員。 若要將此字型用於文字輸出作業,應用程式必須先建立邏輯字型,然後將該字型選取到其裝置內容中。 邏輯字型 是理想字型的應用程式提供描述。 開發人員可以呼叫 createFont CreateFontIndirect 函式來建立邏輯字型。 在此情況下,應用程式會呼叫 CreateFontIndirect,並提供由 CHOOSEFONT初始化的 LOGFONT 結構的指標。 一般而言,呼叫 createFontIndirect 更有效率,因為 CreateFont 需要數個參數,而 createFontIndirect 只需要一個指標 LOGFONT

在應用程式實際可以使用邏輯字型開始繪製文字之前,它必須從裝置內部儲存的字型以及資源已載入作系統的字型中找到最接近的相符專案。 儲存在裝置或作系統上的字型稱為 實體字型。 尋找最符合指定邏輯字型之實體字型的程序稱為字型對應。 當應用程式呼叫 SelectObject 函式並提供識別邏輯字型的句柄時,就會發生此程式。 字型對應是使用內部演算法來執行,其會比較所要求邏輯字型的屬性與可用實體字型的屬性。 當字型對應程式演算法完成搜尋並判斷最接近的相符專案時,SelectObject 函式會傳回,而且應用程式可以使用新的字型開始繪製文字。

SetMapperFlags 函式會指定字型對應器演算法是否只搜尋符合實體裝置外觀比例的實體字型。 裝置的外觀比例是由該裝置上圖元的寬度和高度所構成的比例。

系統字型(也稱為殼層或預設字型)是用於標題列、功能表和對話框文字的字型。

特殊字型選取考慮

雖然大部分字型選取作業都牽涉到使用者,但有些情況並非如此。 例如,開發人員可能想要在應用程式中使用唯一字型,在控件視窗中繪製文字。 若要選取適當的字型,應用程式必須能夠判斷可用的字型、建立邏輯字型來描述其中一個可用字型,然後將該字型選取至適當的裝置內容。

應用程式可以使用 EnumFontsEnumFontFamilies 函式來列舉可用的字型。 建議 EnumFontFamilies,因為它會列舉與家族名稱相關聯的所有樣式。 這適用於具有許多或不尋常的樣式的字型,以及跨越國際框線的字型。

一旦應用程式列舉了可用的字型並找到適當的相符專案,它應該使用字型列舉函式所傳回的值,初始化LOGFONT結構的成員。 然後,它可以呼叫 CreateFontIndirect 函式,並將指標傳遞給初始化 的 LOGFONT 結構。 如果 createFontIndirect函式成功,應用程式就可以呼叫 selectObject函式來選取邏輯字型。 初始化 LOGFONT 結構的成員時,請務必在 lfCharSet 成員中指定特定的字元集。 這個成員在字型對應程式中很重要,如果這個成員未正確初始化,結果將會不一致。 如果您在 LOGFONT 結構 lfFaceName 成員中指定字樣名稱,請確定 lfCharSet 值符合 lfFaceName中所指定字樣字元集。 例如,如果您想要選取 MS Mincho 之類的字型,lfCharSet 必須設定為預先定義的值SHIFTJIS_CHARSET。

許多東亞語言的字型有兩個字樣名稱:英文名稱和當地語系化名稱。 CreateFontCreateFontIndirectCreateFontIndirectEx 採用符合語言的系統地區設定當地語系化字樣名稱,但會採用所有其他系統地區設定的英文字樣名稱。 最好的方法是嘗試一個名稱,並在失敗時嘗試另一個名稱。 請注意,EnumFontsEnumFontFamilies,如果系統地區設定不符合字型的語言,EnumFontFamiliesEx 會傳回英文字型名稱。 從 Windows 2000 開始,由於 createFont字型對應程式、CreateFontIndirect,以及 CreateFontIndirectEx 會辨識任何字樣名稱,因此不再是問題。