GDI+ DrawString为何可绘制所选Font不支持的象形字符
原因说明
这个现象是GDI+默认的**字体回退(Font Fallback)**机制导致的,和传入的Segoe UI字体本身是否支持中文字符没有直接关系:
- 调用
DrawString()时传入的Font对象仅作为首选渲染字体参考,并非强制要求所有字符必须绑定该字体绘制。当GDI+检测到当前首选字体不存在目标字符的对应字形时,不会直接抛出错误或者渲染缺字方框,而是自动按照系统预设的字体匹配链路,查找本机已安装的、支持该字符的其他字体完成渲染。 - 测试所用的Segoe UI是西文字体,本身确实没有收录CJK中文字形,遇到“测试”这类简体中文字符时,简体中文环境下的Windows系统会自动回退到微软雅黑、宋体等默认中文字体完成绘制,因此最终输出的字符显示正常。
对应测试代码如下:
FontFamily fontFamily("Segoe UI"); Font font(&fontFamily, 16, FontStyleRegular, UnitPoint); SolidBrush brush(Color::Black); graphics.DrawString("测试", -1, &font, PointF(10,10), &brush);
补充说明:如果需要关闭默认自动回退、强制所有字符仅使用传入的字体渲染(缺字时显示空白方框),可以通过自定义GDI+字体映射规则、修改
StringFormat相关配置实现。
内容的提问来源于stack exchange,提问作者23W
相关产品推荐
相关产品推荐

