Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用System.Drawing.Font.FromHfont(IntPtr hfont)从System_字体库对象创建System.Drawing.Font_C#_.net_Winforms_Winapi_Gdi - Fatal编程技术网

C# 使用System.Drawing.Font.FromHfont(IntPtr hfont)从System_字体库对象创建System.Drawing.Font

C# 使用System.Drawing.Font.FromHfont(IntPtr hfont)从System_字体库对象创建System.Drawing.Font,c#,.net,winforms,winapi,gdi,C#,.net,Winforms,Winapi,Gdi,我正在尝试使用System.Drawing.Font.FromHfont(IntPtr hfont)使用System\u Font库存对象创建System.Drawing.Font的实例,如下所示: static Font GetStockFont(StockObjects index) { Font returnFont = Font.FromHfont(GetStockObject(index)); return returnFon

我正在尝试使用
System.Drawing.Font.FromHfont(IntPtr hfont)
使用System\u 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
exception,我缺少什么吗?我的印象是,在本例中,GetStockObject将返回正确的HFont:

仅支持TrueType字体。这不是TrueType字体。

您可以忽略的内容:

根据:系统字体。默认情况下,系统使用系统字体进行绘制 菜单、对话框控件和文本。不建议您 使用默认的GUI字体或系统字体获取对话框使用的字体 和窗户;有关更多信息,请参阅备注部分。这个 默认系统字体为Tahoma

使用GetStockObject函数可以获得以下两个方面 称为系统字体和默认图形用户界面字体的字体。它们是什么

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

回到Windows2.0的旧时代,对话框使用的字体 是一种叫做System的位图字体。这是系统使用的字体 检索,并且它仍然是的默认对话框字体 兼容性原因。当然,现在没有人会使用这种方法 他们对话框的字体很难看。(除其他外,这是一个 位图字体,因此在高分辨率下不好看,也不 是否可以对其进行抗锯齿处理。)

默认的图形字体有着更不光彩的历史。它是创建的 在Windows 95开发期间,希望成为新的默认版本 GUI字体,但到1994年7月,Windows本身停止使用它 SystemParametersInfo函数返回的各种字体。 它的存在现在是残存的

系统字体和默认图形用户界面字体的一个主要问题是 典型的美式英语机器,它们映射到位图字体,而不是 支持ClearType。

如果您想使用
DEFAULT\u GUI\u FONT
,您可以通过
SystemParametersInfo(SPI\u GETNONCLIENTMETRICS)
引用
NONCLIENTMETRICS
,获取
NONCLIENTMETRICS
,然后使用它来创建自己的字体。或者您可以查询
系统参数信息(SPI\u GETICONTITLELOGFONT)
并使用它

希望能帮助您:)

您可能忽略的内容:

根据:系统字体。默认情况下,系统使用系统字体进行绘制 菜单、对话框控件和文本。不建议您 使用默认的GUI字体或系统字体获取对话框使用的字体 和窗户;有关更多信息,请参阅备注部分。这个 默认系统字体为Tahoma

使用GetStockObject函数可以获得以下两个方面 称为系统字体和默认图形用户界面字体的字体。它们是什么

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

回到Windows2.0的旧时代,对话框使用的字体 是一种叫做System的位图字体。这是系统使用的字体 检索,并且它仍然是的默认对话框字体 兼容性原因。当然,现在没有人会使用这种方法 他们对话框的字体很难看。(除其他外,这是一个 位图字体,因此在高分辨率下不好看,也不 是否可以对其进行抗锯齿处理。)

默认的图形字体有着更不光彩的历史。它是创建的 在Windows 95开发期间,希望成为新的默认版本 GUI字体,但到1994年7月,Windows本身停止使用它 SystemParametersInfo函数返回的各种字体。 它的存在现在是残存的

系统字体和默认图形用户界面字体的一个主要问题是 典型的美式英语机器,它们映射到位图字体,而不是 支持ClearType。

如果您想使用
DEFAULT\u GUI\u FONT
,您可以通过
SystemParametersInfo(SPI\u GETNONCLIENTMETRICS)
引用
NONCLIENTMETRICS
,获取
NONCLIENTMETRICS
,然后使用它来创建自己的字体。或者您可以查询
系统参数信息(SPI\u GETICONTITLELOGFONT)
并使用它


希望对您有所帮助:)

您可以使用
白色画笔获得有效的字体句柄(您将获得默认大小的默认字体:12分)
NULL\u笔刷
将为您提供相同的默认字体,但字体大小为通用上下文中可用的最小字体,
1.5
点数。其他一些库存对象(
LTGRAY\u BRUSH
GRAY\u BRUSH
,但不是
BLACK\u BRUSH
)将返回相同的hFont对象<代码>默认\u GUI\u字体
将返回
Microsoft无衬线,8.25分。其他字体无法为您提供兼容的对象。您可以使用
白刷
获得有效的字体句柄(您将获得默认大小的默认字体:12点)
NULL\u笔刷
将为您提供相同的默认字体,但字体大小为通用上下文中可用的最小字体,
1.5
点数。其他一些库存对象(
LTGRAY\u BRUSH
GRAY\u BRUSH
,但不是
BLACK\u BRUSH
)将返回相同的hFont对象<代码>默认\u GUI\u字体
将返回
Microsoft无衬线,8.25分。其他人无法为您提供兼容的对象。