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值類似 (,但不) 相同。 陣列的每個元素都可以設定為零或下列其中一個值。
值 | 意義 |
---|---|
|
阿拉伯文字元。 |
|
希伯來文字元。 |
|
來自拉丁文或其他單一位元組字元集的字元,適用於由左至右的語言。 |
|
由左至右語言的拉丁或其他單一位元組字元集的數位。 |
|
與目前字型相關聯的字元集數位。 |
此外,使用 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旗標,則不需要任何數位才能正常運作。 (雖然並非必要,但仍可使用它們。如果使用 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) |
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應