【发布时间】:2020-03-24 13:32:01
【问题描述】:
我正在尝试使用 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.
【问题讨论】:
-
您可以使用
WHITE_BRUSH获得有效的字体句柄(您将获得默认大小的默认字体:12 磅)。NULL_BRUSH将为您提供相同的默认字体,但在通用上下文中可用的最小尺寸,1.5点。其他一些股票对象(LTGRAY_BRUSH、GRAY_BRUSH,但不是BLACK_BRUSH)将返回相同的 hFont 对象。DEFAULT_GUI_FONT将返回Microsoft Sans Serif, 8.25积分。其他人不会给你一个兼容的对象。
标签: c# .net winforms winapi gdi