使用System.Drawing.Font.FromHfont(IntPtr hfont)从SYSTEM_FONT股票对象创建System.Drawing.Font

问题描述 投票:0回答:1

我正在尝试使用[System.Drawing.Font.FromHfont(IntPtr hfont)使用SYSTEM_FONT库存对象创建System.Drawing.Font的实例,如下所示:

      static Font GetStockFont(StockObjects index)
      {
         Font returnFont = Font.FromHfont(GetStockObject(index));
         return returnFont;
      }

      [DllImport("gdi32.dll")]
      static extern IntPtr GetStockObject(StockObjects fnObject);

      enum StockObjects 
      {
         WHITE_BRUSH = 0,
         LTGRAY_BRUSH = 1,
         GRAY_BRUSH = 2,
         DKGRAY_BRUSH = 3,
         BLACK_BRUSH = 4,
         NULL_BRUSH = 5,
         HOLLOW_BRUSH = NULL_BRUSH,
         WHITE_PEN = 6,
         BLACK_PEN = 7,
         NULL_PEN = 8,
         OEM_FIXED_FONT = 10,
         ANSI_FIXED_FONT = 11,
         ANSI_VAR_FONT = 12,
         SYSTEM_FONT = 13,
         DEVICE_DEFAULT_FONT = 14,
         DEFAULT_PALETTE = 15,
         SYSTEM_FIXED_FONT = 16,
         DEFAULT_GUI_FONT = 17,
         DC_BRUSH = 18,
         DC_PEN = 19
      }

但是,当我得到以下System.ArgumentException例外时,我缺少什么吗?我的印象是,在这种情况下,GetStockObject将返回适当的HFont:

Only TrueType fonts are supported. This is not a TrueType font.

c# .net winforms winapi gdi
1个回答
0
投票
您可能会忽略的内容:

根据MSDN:系统字体。默认情况下,系统使用系统字体绘制菜单,对话框控件和文本。不建议您使用DEFAULT_GUI_FONT或SYSTEM_FONT获得对话框使用的字体和窗户;有关更多信息,请参见备注部分。的默认系统字体是Tahoma。

An ancient document:

使用GetStockObject函数可以得到的东西有两个字体称为SYSTEM_FONT和DEFAULT_GUI_FONT。他们是什么?

它们是没有人使用的字体。

回到Windows 2.0的旧时代,用于对话框的字体是一种称为System的位图字体。这是SYSTEM_FONT的字体检索,并且它仍然是默认的对话框字体兼容性原因。当然,如今没有人会使用他们的对话框的丑陋字体。 (除其他事项外,位图字体,因此在高分辨率下效果也不佳可以消除锯齿吗?)

DEFAULT_GUI_FONT具有更辉煌的历史。它被创造了在Windows 95开发过程中,希望成为新的默认设置GUI字体,但到1994年7月,Windows本身停止使用它SystemParametersInfo函数返回的各种字体。现在,它的存在属于遗迹。

使用SYSTEM_FONT和DEFAULT_GUI_FONT的一个主要陷阱是典型的美式英语计算机,它们映射到不包含的位图字体支持ClearType。

[如果要使用DEFAULT_GUI_FONT,则可以引用@RbMm's answer,通过NONCLIENTMETRICS获得SystemParametersInfo(SPI_GETNONCLIENTMETRICS),然后将其用作LOGFONT数据,以创建自定义字体。或者您可以查询SystemParametersInfo(SPI_GETICONTITLELOGFONT)并使用它。

希望为您提供帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.