很容易判断当前字体是否支持unicode字符?

Pet*_*ter 6 c c++ winapi c++builder

我正在使用Borland C++ Builder 2009,我会像这样显示右箭头和左箭头:

Button2->Hint = L"Ctrl+\u2190" ;
Button3->Hint = L"Ctrl+\u2192" ; 
Run Code Online (Sandbox Code Playgroud)

这在Windows 7上工作正常,应用程序使用字体'Segoe UI'.

在XP上我得到一个正方形而不是箭头,我在XP上使用字体'Tahoma'.换句话说,XP中的Tahoma中没有提到的Unicode字符.

有一种简单快捷的方法可以简单地检查当前使用的字体是否支持所请求的Unicode字符?如果是这样,我可以用'>'或'<'替换箭头.不完美,但足够好.我不想在这个阶段开始更改字体.

你的帮助表示赞赏

Jon*_*ter 7

您可以使用GetFontUnicodeRanges()以查看当前选择到DC中的字体支持哪些字符.请注意,此API要求您调用一次以查找缓冲区需要的大小,以及第二次实际获取数据.

DWORD dwSize = GetFontUnicodeRanges(hDC, nullptr);
BYTE* bBuffer = new BYTE[dwSize];
GLYPHSET* pGlyphSet = reinterpret_cast<GLYPHSET*>(bBuffer);
GetFontUnicodeRanges(hDC, pGlyphSet);
// use data in pGlyphSet, then free the buffer
delete[] bBuffer;
Run Code Online (Sandbox Code Playgroud)

GLYPHSET结构有一个名为的成员数组ranges,可用于确定字体支持的字符范围.