【问题标题】:System.Drawing: how to control font weight?System.Drawing:如何控制字体粗细?
【发布时间】:2009-03-06 07:59:09
【问题描述】:

我发现我无法更改字体粗细,即使我是通过 win32 pinvoke 创建的。我正在使用 Graphics.DrawString 来使用字体。我很困惑,找不到任何东西。

[DllImport("gdi32.dll")]
static extern IntPtr CreateFont(int nHeight, int nWidth, int nEscapement,
   int nOrientation, int fnWeight, uint fdwItalic, uint fdwUnderline, uint
   fdwStrikeOut, uint fdwCharSet, uint fdwOutputPrecision, uint
   fdwClipPrecision, uint fdwQuality, uint fdwPitchAndFamily, string lpszFace);

private void CreateLabelFont()
{
    // Remove -13 magic number later.
    IntPtr hFont = CreateFont(-13, 0, 0, 0, 100, 0, 0, 0, 1, 0, 0, 0, 0, "Arial\0");
    labelFont = Font.FromHfont(hFont);
}

【问题讨论】:

    标签: c# .net system.drawing


    【解决方案1】:

    来自 CreateFont 的 MSDN 参考:

    fnWeight [in] 在 0 到 1000 的范围内指定字体的粗细。例如,400 是正常的,700 是粗体。如果此值为零,则使用默认权重。

    这意味着您在创建字体时会固定权重。如果您需要不同的字体粗细,您必须多次调用CreateFont

    【讨论】:

    • 并且提供的 fnWeight=700 的代码按预期显示粗体文本。
    • 我拥有它的方式应该可以工作。我想我在绘制字体时可能会遇到复杂的图形转换问题。
    • 是的,刚刚确认代码在没有转换时有效。我在变换下的 x-y 图上绘制注释,它似乎弄乱了字体。涉及到变换和轴绘制代码......这将导致一个很长的帖子。
    • 为什么不使用两个不同的 HFONT?
    • 您是否对字体对象应用了变换?
    猜你喜欢
    • 2019-08-19
    • 2011-10-22
    • 2017-01-20
    • 2015-11-14
    • 2014-07-16
    • 1970-01-01
    • 2014-10-04
    • 2011-12-05
    相关资源
    最近更新 更多