共用方式為


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。 例如,在後者中,lpOrder[i] 的值是輸出字串 lpOutString[i] 中 lpString 的位置。

GetFontLanguageInfo 傳回GCP_REORDER旗標時,通常會使用此旗標,這表示原始字串需要重新排序。 例如,在希伯來文中,文字會從右至左執行,lpOrder 陣列會提供原始字串中每個元素的確切位置。

lpDx

陣列的指標,可接收相鄰字元儲存格之間的距離,如果不需要這些距離,則會 NULL。 如果完成圖像轉譯,則字元的距離不是字元,因此產生的陣列可以與 ExtTextOut 函式搭配使用。

此陣列中的距離會依顯示順序排列。 若要尋找原始字串中 i 字元距離,請使用 lpOrder 陣列,如下所示:


width = lpDx[lpOrder[i]];

lpCaretPos

接收插入號位置值的陣列指標,如果不需要插入號位置,則為NULL 。 每個值都會指定對應字元前面的插入號位置。 在某些語言中,每個字元的插入號位置可能不會緊接在字元的左邊。 例如,在希伯來文中,文字會從右至左執行,插入號位置位於字元的右邊。 如果完成字元順序,lpCaretPos 符合原始字串,而不是輸出字串。 這表示某些相鄰的值可能相同。

此陣列中的值會依輸入順序排列。 若要尋找原始字串中第 i 個字元的插入號位置值,請使用陣列,如下所示:


position = lpCaretPos[i];

lpClass

陣列的指標,其中包含和/或接收字元分類。 這些值表示如何在字串中配置字元,而且與 getStringTypeEx 函式 所傳回的CT_CTYPE2值類似(但不完全相同)。 陣列的每個元素都可以設定為零或下列其中一個值。

價值 意義
GCPCLASS_ARABIC
阿拉伯文字元。
GCPCLASS_HEBREW
希伯來文字元。
GCPCLASS_LATIN
來自拉丁文或其他單一位元組字元集的字元,適用於由左至右的語言。
GCPCLASS_LATINNUMBER
來自拉丁文或其他單一位元組字元集的數位,適用於由左至右的語言。
GCPCLASS_LOCALNUMBER
與目前字型相關聯的字元集數位。
 

此外,在提供具有 GCP_CLASSIN 旗標的 lpClass 陣列中的值時,可以使用下列專案。

價值 意義
GCPCLASS_LATINNUMERICSEPARATOR
僅限輸入。 用來分隔拉丁數位的字元,例如逗號或小數點。
GCPCLASS_LATINNUMERICTERMINATOR
僅限輸入。 用來終止拉丁數位的字元,例如加號或減號。
GCPCLASS_NEUTRAL
僅限輸入。 字元沒有特定的分類。
GCPCLASS_NUMERICSEPARATOR
僅限輸入。 用來分隔數位的字元,例如逗號或小數點。
 

對於使用 GCP_REORDER 旗標的語言,也可以使用下列值搭配 GCP_CLASSIN 旗標。 與上述值不同,這可用於 lpClass 陣列中的任何位置,下列所有值只會用於陣列的第一個位置。 全部都與其他分類結合。

請注意,GCPCLASS_PREBOUNDLTR和GCPCLASS_PREBOUNDRTL互斥,GCPCLASSPOSTBOUNDLTR 和 GCPCLASSPOSTBOUNDRTL 也一樣。

價值 意義
GCPCLASS_PREBOUNDLTR
lpClass[0] 設定為GCPCLASS_PREBOUNDLTR將字串系結至字串之前的由左至右閱讀順序。
GCPCLASS_PREBOUNDRTL
lpClass[0] 設定為GCPCLASS_PREBOUNDRTL將字串系結至字串之前的從右至左閱讀順序。
GCPCLASS_POSTBOUNDLTR
lpClass[0] 設定為GCPCLASS_POSTBOUNDLTR將字串系結至字串之後的從左至右閱讀順序。
GCPCLASS_POSTBOUNDRTL
lpClass[0] 設定為GCPCLASS_POSTBOUNDRTL將字串系結至字串之後的從右至左閱讀順序。
 

若要強制以特定方式執行字元的配置,請預設對應數位專案的分類:函式會將這類預設分類維持不變,而且只會針對已設定為零的陣列元素計算分類。 只有當已設定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 語言,這將會相同。

言論

lpGlyphslpOutString,或兩者都不需要取決於 GetFontLanguageInfo 呼叫的結果。

如果是英文等語言的字型,其中不會傳回任何GCP_DBCS、GCP_REORDER、GCP_GLYPHSHAPE、GCP_LIGATE、GCP_DIACRITIC或GCP_KASHIDA旗標,則不需要任何陣列才能正常運作。 (雖然不需要,但仍可使用它們。如果使用 lpOutString 陣列,它將會與傳遞 至 getCharacterPlacementlpInputString 完全相同。不過請注意,如果使用GCP_MAXEXTENT,則 lpOutString 會包含已截斷的字串,而不是原始的確切複本。

如果是希伯來文等語言的字型,其中 DO 有重新排序,但通常沒有額外的字元圖形,則應該使用 lpOutString。 這會提供螢幕可讀取順序上的字串。 不過,通常不需要 lpGlyphs 陣列。 (希伯來文可以有額外的字元,如果字型是 TrueType/Open 字型。)

在泰文或阿拉伯文等語言中,GetFontLanguageInfo 傳回GCP_GLYPHSHAPE旗標時,lpOutString 會提供傳遞給 GetCharacterPlacement字串串的顯示可讀取順序,但值仍將是未調整的字元。 若要正確顯示,必須使用 lpGlyphs 陣列。

注意

wingdi.h 標頭會將GCP_RESULTS定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的 慣例。

要求

要求 價值
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
支援的最低伺服器 Windows 2000 Server [僅限傳統型應用程式]
標頭 wingdi.h (包括 Windows.h)

另請參閱

ExtTextOut

字型和文字結構

字型和文字概觀

GetCharacterPlacement

GetFontLanguageInfo