GCP_RESULTSA結構(wingdi.h)
GCP_RESULTS 結構包含字串中字元的相關信息。 此結構會接收 getCharacterPlacement 函式
語法
typedef struct tagGCP_RESULTSA {
DWORD lStructSize;
LPSTR lpOutString;
UINT *lpOrder;
int *lpDx;
int *lpCaretPos;
LPSTR lpClass;
LPWSTR lpGlyphs;
UINT nGlyphs;
int nMaxFit;
} GCP_RESULTSA, *LPGCP_RESULTSA;
成員
lStructSize
結構的大小,以位元組為單位。
lpOutString
接收輸出字串的緩衝區指標,如果不需要輸出字串串,NULL。 輸出字串是原始字串的版本,依指定裝置上顯示的順序。 輸出字串通常與原始字串相同,但如果字串需要重新排序並設定GCP_REORDER旗標,或原始字串超過最大範圍且已設定GCP_MAXEXTENT旗標,則可能會不同。
lpOrder
接收排序索引的陣列指標,如果不需要排序索引,則會 NULL。 不過,其意義取決於 GCP_RESULTS的其他元素。 如果要傳回字元索引,則索引會用於 lpGlyphs 陣列;如果未傳回字元索引,而且要求 lpOrder,則索引適用於 lpOutString。 例如,在後者中,
當 GetFontLanguageInfo 傳回GCP_REORDER旗標時,通常會使用此旗標,這表示原始字串需要重新排序。 例如,在希伯來文中,文字會從右至左執行,lpOrder 陣列會提供原始字串中每個元素的確切位置。
lpDx
陣列的指標,可接收相鄰字元儲存格之間的距離,如果不需要這些距離,則會 NULL。 如果完成圖像轉譯,則字元的距離不是字元,因此產生的陣列可以與 ExtTextOut 函式搭配使用。
此陣列中的距離會依顯示順序排列。 若要尋找原始字串中
width = lpDx[lpOrder[i]];
lpCaretPos
接收插入號位置值的陣列指標,如果不需要插入號位置,則為NULL
此陣列中的值會依輸入順序排列。 若要尋找原始字串中第 i 個字元的插入號位置值,請使用陣列,如下所示:
position = lpCaretPos[i];
lpClass
陣列的指標,其中包含和/或接收字元分類。 這些值表示如何在字串中配置字元,而且與 getStringTypeEx 函式
價值 | 意義 |
---|---|
|
阿拉伯文字元。 |
|
希伯來文字元。 |
|
來自拉丁文或其他單一位元組字元集的字元,適用於由左至右的語言。 |
|
來自拉丁文或其他單一位元組字元集的數位,適用於由左至右的語言。 |
|
與目前字型相關聯的字元集數位。 |
此外,在提供具有 GCP_CLASSIN 旗標的 lpClass 陣列中的值時,可以使用下列專案。
對於使用 GCP_REORDER 旗標的語言,也可以使用下列值搭配 GCP_CLASSIN 旗標。 與上述值不同,這可用於 lpClass 陣列中的任何位置,下列所有值只會用於陣列的第一個位置。 全部都與其他分類結合。
請注意,GCPCLASS_PREBOUNDLTR和GCPCLASS_PREBOUNDRTL互斥,GCPCLASSPOSTBOUNDLTR 和 GCPCLASSPOSTBOUNDRTL 也一樣。
若要強制以特定方式執行字元的配置,請預設對應數位專案的分類:函式會將這類預設分類維持不變,而且只會針對已設定為零的陣列元素計算分類。 只有當已設定GCP_CLASSIN旗標,並提供 lpClass 陣列時,才會使用默認分類。
如果 GetFontLanguageInfo 不會傳回目前字型的GCP_REORDER,則只有GCPCLASS_LATIN值有意義。
lpGlyphs
陣列的指標,這個陣列會接收用來轉譯字串的字元值,如果不需要圖像轉譯,則為NULL
如果在字串上執行一個以上的作業,此陣列會很有用,該字串具有任何形式的連字、Kerning 或順序切換。 針對後續作業使用此陣列中的值,可節省每次產生字元索引所需的時間。
這個陣列一律包含字元索引,而且當這個陣列與 ExtTextOut 函式搭配使用時,必須一律使用ETO_GLYPH_INDEX值。
使用GCP_LIGATE時,您可以限制將一起連結的字元數。 (例如,在阿拉伯文中,三個字元連字元是常見的)。 這是藉由設定 lpGcpResults->lpGlyphs[0] 中所需的最大值來完成。 如果不需要最大值,您應該將此字段設定為零。
對於阿拉伯文等語言,其中 GetFontLanguageInfo 會傳回GCP_GLYPHSHAPE旗標,字元的字元會根據字元在字組的開頭、中間或結尾而有所不同。 一般而言,輸入字串中的第一個字元也會是單字中的第一個字元,而輸入字串中的最後一個字元則會被視為單字中的最後一個字元。 不過,如果顯示的字串是完整字串的子集,例如顯示卷動文字的區段時,這可能不是 true。 在這些情況下,最好強制將第一個或最後一個字元塑造成不是初始或最終形式。 同樣地,若要這樣做,lpGlyphs 陣列中的第一個位置,是使用上述值搭配值GCPGLYPH_LINKBEFORE和/或GCPGLYPH_LINKAFTER的 OR 運算。 例如,GCPGLYPH_LINKBEFORE 的值 |2 表示雙字元連字是所需的最大值,而且字串中的第一個字元應該視為它位於單字中間。
nGlyphs
在輸入時,這個成員必須設定為陣列指標成員所指向的陣列大小。 在輸出中,這會設定為輸出數位中填入的字元數。 如果不需要字元替代 (也就是說,每個輸入字元都對應至一個圖像),則此成員與輸入中的字元相同。
nMaxFit
符合 GetCharacterPlacement 函式 nMaxExtent 參數所指定範圍的字元數。 如果已設定GCP_MAXEXTENT或GCP_JUSTIFY值,這個值可能小於原始字元串中的字元數。 不論是否已指定GCP_MAXEXTENT或GCP_JUSTIFY值,都會設定這個成員。 不同於 nGlyphs,它會指定輸出字元數目,nMaxFit 是指輸入字元串中的字元數。 對於拉丁 SBCS 語言,這將會相同。
言論
lpGlyphs、lpOutString,或兩者都不需要取決於 GetFontLanguageInfo 呼叫的結果。
如果是英文等語言的字型,其中不會傳回任何GCP_DBCS、GCP_REORDER、GCP_GLYPHSHAPE、GCP_LIGATE、GCP_DIACRITIC或GCP_KASHIDA旗標,則不需要任何陣列才能正常運作。 (雖然不需要,但仍可使用它們。如果使用
如果是希伯來文等語言的字型,其中 DO 有重新排序,但通常沒有額外的字元圖形,則應該使用 lpOutString。 這會提供螢幕可讀取順序上的字串。 不過,通常不需要 lpGlyphs 陣列。 (希伯來文可以有額外的字元,如果字型是 TrueType/Open 字型。)
在泰文或阿拉伯文等語言中,
注意
wingdi.h 標頭會將GCP_RESULTS定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows 2000 Professional [僅限傳統型應用程式] |
支援的最低伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
標頭 | wingdi.h (包括 Windows.h) |