共用方式為


wingdi.) h (結構GCP_RESULTSW結構

GCP_RESULTS 結構包含字串中字元的相關信息。 這個結構會接收 GetCharacterPlacement 函式的結果。 對於某些語言,陣列中的第一個專案可能包含更多與語言相關的資訊。

語法

typedef struct tagGCP_RESULTSW {
  DWORD  lStructSize;
  LPWSTR lpOutString;
  UINT   *lpOrder;
  int    *lpDx;
  int    *lpCaretPos;
  LPSTR  lpClass;
  LPWSTR lpGlyphs;
  UINT   nGlyphs;
  int    nMaxFit;
} GCP_RESULTSW, *LPGCP_RESULTSW;

成員

lStructSize

以位元組為單位的結構大小。

lpOutString

接收輸出字串的緩衝區指標,如果不需要輸出字串,則為 NULL 。 輸出字串是原始字串的版本,其順序會依指定裝置上顯示的順序。 輸出字串通常與原始字串相同,但如果字串需要重新排序且已設定GCP_REORDER旗標,或原始字串超過最大範圍且已設定GCP_MAXEXTENT旗標,則可能會不同。

lpOrder

陣列的指標,可接收排序索引,如果不需要排序索引,則為 NULL 。 不過,其意義取決於 GCP_RESULTS的其他元素。 如果要傳回字元索引,則索引會用於 lpGlyphs 陣列;如果未傳回字元索引,而且要求 lpOrder ,則索引適用於 lpOutString。 例如,在後者的情況下, lpOrder[i] 的值是輸出字串 lpOutString 中 lpString[i] 的位置。

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 陣列,則會與傳遞至 GetCharacterPlacement.) Note 的 lpInputString 完全相同,不過,如果使用 GCP_MAXEXTENT,則 lpOutString 會在使用時包含截斷的字符串,而不是原始的確切復本。

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

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

注意

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

規格需求

需求
最低支援的用戶端 Windows 2000 專業版 [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限傳統型應用程式]
標頭 wingdi.h (包含 Windows.h)

另請參閱

ExtTextOut

字型和文字結構

字型和文字概觀

GetCharacterPlacement

GetFontLanguageInfo