【发布时间】:2012-03-15 16:55:04
【问题描述】:
我正在尝试将我的 Graphics.DrawString 调用 (.NET1) 迁移到 TextRenderer.DrawText(.NET 2.0 中的新功能)以获得 ClearType 渲染的优势。
问题在于 TextRenderer 无法正确打印西方字符(韩文、日文等)
这是一个显示问题的示例:
- 您知道为什么使用 TextRenderer.DrawText 时看不到韩文字符吗?
- 您知道如何解决此问题吗?
我正在使用以下两种方法绘制字符串:
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)
所以现在我的问题是:
- 为什么 Graphics.Drawtext 绘制韩文字符,即使字体不支持它们?
- 我在 Visual Studio 编辑器中粘贴了 corean 文本,该编辑器使用“Consolas”字体并且绘制正确。那么,为什么 Visual Studio 编辑器可以显示韩文字符,而文本框却不能呢?
【问题讨论】:
-
看到矩形意味着您使用的字体不支持字形。在 Vista+ 上遇到的奇怪问题,特别是因为您似乎至少有一种支持它们的字体。无法从屏幕截图中对代码进行逆向工程。
-
@HansPassant:这两种情况的字体是一样的,所以我不确定是不是字体问题。
-
和 Hans 一样,我不相信仅仅因为一个函数正确显示字体就意味着另一个函数也应该如此。为什么不检查你机器上的字体,看看有什么影响?
-
你是对的,它是字体,但我不明白为什么 Visual Studio 可以使用 Consolas 绘制韩文,而我的文本框不能
标签: c# .net winforms text drawtext