DWORD GetGlyphIndices(
_In_ HDC hdc,
_In_ LPCTSTR lpstr,
_In_ int c,
_Out_ LPWORD pgi,
_In_ DWORD fl
);
参数[...]
fl
[输入]:指定如果不支持字形应如何处理。此参数可以是以下值。
GGI_MARK_NONEXISTING_GLYPHS
-- 将不支持的字形标记为十六进制值0xffff。
备注部分再次链接到Uniscribe函数,例如ScriptGetCMap
此函数尝试为lpstr所指向的字符串中的每个字符标识一个单一的字形表示。虽然这对于某些低级别目的(如操作字体文件)很有用,但希望将字符串映射到字形的高级应用程序通常希望使用Uniscribe函数。
由于两种API都从Win2k开始受支持,因此使用哪种可能只是个人喜好问题。
(编辑:刚刚注意到导入已经在Windows.pas中)
示例代码
procedure Test( dc : HDC);
var str : UnicodeString;
buf : array of WORD;
len,i : Integer;
count : DWORD;
begin
str := 'abc'+WideChar($0416)+'äöü';
len := Length(str);
SetLength( buf, len);
count := GetGlyphIndicesW( dc, PWideChar(str), len, @buf[0], GGI_MARK_NONEXISTING_GLYPHS);
if count > 0 then begin
for i := 0 to count-1 do begin
Write('index ',i,': ');
if buf[i] = $FFFF
then Writeln('glyph missing')
else Writeln('ok');
end;
end;
end;
产出。index 0: ok
index 1: ok
index 2: ok
index 3: glyph missing
index 4: ok
index 5: ok
index 6: ok