c++ - 判断当前字体是否支持 unicode 字符的简便方法?

标签 c++ c winapi c++builder

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

Button2->Hint = L"Ctrl+\u2190" ;
Button3->Hint = L"Ctrl+\u2192" ; 

这在 Windows 7 上运行良好,应用程序使用字体“Segoe UI”。

在 XP 上我得到一个正方形而不是箭头,我在 XP 上使用字体“Tahoma”。 换句话说,提到的 Unicode 字符在 XP 上的 Tahoma 中不存在。

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

感谢您的帮助。

最佳答案

您可以使用 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;

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

关于c++ - 判断当前字体是否支持 unicode 字符的简便方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34278340/

相关文章:

c++ - 如何在 Python + SWIG 中接收引用和指针参数?

c++ - 在 Boost 中使用持续时间合并仅时间

c++ - 使用来自类成员的指针初始化二维数组?

c++ - 常见对话框 Win32

c++ - 如何禁用 Alt 键的正常行为?

c++ - 填充色和背景色的区别

c++ - CMake:覆盖由 target_link_libraries 添加的库

c - C 中的十六进制到二进制转换显示错误的输出

c++ - ctags c++ 查找函数的第一个实例,无论类如何

c - 如何在C中添加时间?