FONTOBJ 結構 (winddi.h)

FONTOBJ 結構可用來讓驅動程式存取特定字型實例的相關信息。

語法

typedef struct _FONTOBJ {
  ULONG     iUniq;
  ULONG     iFace;
  ULONG     cxMax;
  FLONG     flFontType;
  ULONG_PTR iTTUniq;
  ULONG_PTR iFile;
  SIZE      sizLogResPpi;
  ULONG     ulStyleSize;
  PVOID     pvConsumer;
  PVOID     pvProducer;
} FONTOBJ;

成員

iUniq

指定字型的相異實現。 驅動程式可以使用此值來識別其可能快取的 GDI 字型,或識別驅動程式本身字型的實現。 如果 GDI 字型的這個成員為零,則不應該快取字型。

iFace

指定裝置字型的裝置索引,該字型是由 DrvQueryFont的呼叫所註冊。 如果字型是 GDI 字型,這個成員就只有 GDI 的意義,而且驅動程式應該忽略它。

cxMax

指定指定字型中最大圖像的寬度,以像素為單位。

flFontType

這是指定字型類型的值。 此成員可以是下表所列旗標的組合。 不過, (注意,FO_GRAY16和FO_NOGRAY16互斥。)

旗標 意義
FO_CFF Postscript OpenType 字型。
FO_DBCS_FONT Font 支援 DBCS 代碼頁。
FO_EM_HEIGHT TrueType 驅動程序內部旗標。
FO_GRAY16 字型點陣圖是每圖元四位混合 (Alpha) 值。
FO_MULTIPLEMASTER 多宿主 (Type1 或 OpenType) 字型。
FO_NOGRAY16 表示字型驅動程式無法 (或不會) 特定字型實現的灰階。
FO_POSTSCRIPT Postscript (Type1 或 OpenType) 字型。
FO_SIM_BOLD 驅動程式模擬粗體字型。
FO_SIM_ITALIC 驅動程式模擬斜體字型。
FO_TYPE_DEVICE 裝置特定的字型。
FO_TYPE_OPENTYPE OpenType 字型。
FO_TYPE_RASTER 點陣圖字型。
FO_TYPE_TRUETYPE TrueType 字型。
FO_VERT_FACE 垂直字型。
 

如果已設定FO_RASTER旗標,寫入指定 STROBJ 結構的字元會是位圖,否則它們是 PATHOBJ 結構的指標。 如果圖像影像是以 PATHOBJ 結構的形式傳回,驅動程式必須檢查相關聯 IFIMETRICS 結構之 flInfo 成員的FM_INFO_TECH_STROKE旗標。 如果已設定該旗標,則應該筆劃路徑,否則必須使用替代模式慣例來填入路徑。

如果已設定FO_GRAY16旗標,則字型位圖會是每圖元四位混合 (alpha) 值。 值為零表示產生的像素應該具有與背景相同的色彩。 如果Alpha值為 k,下表會使用線性Alpha混合或 gamma 更正的Alpha混合來描述所產生圖元的屬性。 在這兩種方法中,前景和背景色彩分別為 cf 和 cb

像素屬性 Description
混合色彩
(線性 Alpha 混合)
線性 Alpha 混合會產生混合色彩,這是前景和背景色彩的線性組合。

c = b * cf + (1 - b) * cb

混合分數 b 的取得方式如下:

b = k / 15,適用於 k = 0、1、2、...、15

注意:前景和背景色彩包含 R、G、B) 三個色彩色頻 (。

混合色彩
(gamma 更正的 Alpha 混合)
Gamma 更正的 Alpha 混合會產生混合色彩,方法是引發相依於 Alpha 值的變數為固定乘冪。

提供兩個公式:當前景色彩數值大於背景色彩時,應該使用一個公式;另一個應該用於相反的情況。 (當前景和背景色彩相等時,這兩個公式都會簡化為 c = cb.)

如果c c c >b
c = cb + pow (b[k], (1 / gamma) ) * (cf - cb)
如果c c c <b
c = cb + (1 - pow (1 - b[k], 1 / gamma) ) * (cf - cb)

在這些公式中,gamma = 2.33,而 b[k] 是混合分數 k,如下所示:

b[k] = 0,k = 0,而
b[k] = (k + 1) / 16,適用於 k = 1, 2, ..., 15

注意:不同於線性 Alpha 混合,這些公式必須套 用至三 個色彩色板 (R、G、B) 。

 

GDI 會在要求字型灰階為 16 個值的其中一個值時,將專案上的FO_GRAY16旗標設定為 DrvQueryFontData 函式。 如果字型驅動程式無法讓特定字型實現呈現灰階,則字型提供者會清除FO_GRAY16旗標,並設定FO_NOGRAY16旗標,以通知 GDI 無法滿足灰階要求。

iTTUniq

指定相關聯的 TrueType 檔案。 TrueType 字型臉部的兩個不同點大小實現將會有共用相同 iTTUniq 值的 FONTOBJ 結構,但會有不同的 iUniq 值。 只有 TrueType 字型類型可以有非零 iTTUniq 成員。 如需詳細資訊,請參閱 flFontType

iFile

已載入之裝置字型的驅動程式定義值指標。 如果字型是 GDI 字型,則會在內部使用此成員來識別字型,而且應該予以忽略。

sizLogResPpi

指定實現此字型之裝置的解析度。

ulStyleSize

指定字型實例的樣式大小,以點為單位。

pvConsumer

與這個字型實例相關聯的取用者配置數據的指標。 取用者是一種驅動程式,可接受圖像資訊作為產生文字輸出的輸入。 只有字型取用者可以修改這個成員。 此字型的取用者可以將任何資訊儲存在此成員所指向的位置。 引擎不會修改此成員。 當 FONTOBJ 結構第一次傳遞給取用者時, pvConsumer 成員保證為 null。

pvProducer

與這個字型實例相關聯的產生者配置數據的指標。 產生者是一種驅動程式,可產生圖像資訊做為輸出;這包括圖像計量、點陣圖和外框。 只有字型產生者可以修改這個成員。 此字型的產生者可以將任何資訊儲存在此成員所指向的位置。 引擎不會修改此成員。 pvProducer 成員保證在第一次將 FONTOBJ 結構傳遞至產生者時為 null。

備註

作為快捷鍵,允許驅動程式存取 FONTOBJ 結構的公用成員。

驅動程式可以是生產者和取用者。 例如,印表機驅動程式可以在處理驅動程式提供的 DrvQueryFontData 函式呼叫時做為產生者,以提供字元計量,稍後在處理驅動程式提供的 DrvTextOut 函式呼叫時採取動作。

規格需求

需求
標頭 winddi.h (包括 Winddi.h)

另請參閱

DrvDestroyFont

DrvGetGlyphMode

DrvQueryFont

DrvQueryTrueTypeOutline

FONTOBJ_cGetAllGlyphHandles

FONTOBJ_cGetGlyphs

FONTOBJ_pifi

FONTOBJ_pxoGetXform

FONTOBJ_vGetInfo

IFIMETRICS