[英]Graphics.DrawString vs TextRenderer.DrawText drawing korean characters
我试图将我的Graphics.DrawString
调用(.NET1)迁移到TextRenderer.DrawText
(.NET 2.0中的新增功能),以获取ClearType呈现的优点。
问题是TextRenderer无法正确打印西方字符(韩文,日文等)。
这是显示问题的示例:
我使用以下两种方法绘制字符串:
private void DrawGraphicsString(
Graphics g, string text, Font font, Point p)
{
g.DrawString(
text, font, text_brush, p.X, p.Y, mStringFormat);
// mStringFormat is
// StringFormat.GenericTypographic |
// StringFormatFlags.MeasureTrailingSpaces
}
private void DrawTextRendererString(
Graphics g, string text, Font font, int x, int y)
{
TextRenderer.DrawText(
g, text, font, p, this.ForeColor, this.BackColor, mTextFormatFlags);
// mTextFormatFlags are
// StringFormat.GenericTypographic + StringFormatFlags.MeasureTrailingSpaces
// mTextFormatFlags =
// TextFormatFlags.NoPrefix |
// TextFormatFlags.NoPadding |
// TextFormatFlags.WordBreak |
// TextFormatFlags.TextBoxControl |
// TextFormatFlags.NoClipping |
// TextFormatFlags.ExpandTabs;
}
编辑:使用其他字体可以正常工作(使用的字体Malgun Gothic)
所以现在我的问题是:
事实是,当编辑者知道他们知道的Unicode范围中不支持的字符时,便会更改其默认Unicode字体的字体(在您的情况下,可能是Arial Unicode Sans MS或MS-Mincho需要CJK Unicode定义)。 同时,使用特定字体强制渲染不允许进行此字体切换。
这就是为什么在编译之前必须知道是否需要Unicode以及在这种情况下要使用哪种字体的原因。
因此,对于您的另一个问题,为什么DrawString成功地完成了DrawText不能执行的字体切换。 秘密在您设置的StringFormat.GenericTypographic标志中。 GenericTypographics默认包含将Language ID设置为中性语言,
这意味着将使用与调用线程关联的当前语言。 [1]
由于您使用的是CJK输入字符串,因此您的调用线程可能知道将语言设置为CJK语言集,然后通过使用通用的Unicode字体开关来确保显示正确的符号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.