0

根据MSDN 文档EnumFontFamiliesEx,该函数的第一个参数描述为:

hdc [in]
设备上下文句柄,从中枚举字体。

  1. 它到底是什么意思?
  2. 设备上下文是什么意思?
  3. 为什么设备上下文应该与字体相关?
4

3 回答 3

2

问题(3)是一件很难找到解释的事情,但原因很简单:

一些设备提供自己的字体支持。例如,PostScript 打印机将允许您使用 PostScript 字体。但是在屏幕上渲染时,这些相同的字体将无法使用,或者在没有 PostScript 支持的情况下渲染到另一台打印机。另一个例子是绘图仪(它是电动笔)需要具有固定笔画粗细的矢量字体,因此光栅字体不能与此类设备一起使用。

如果您对特定于设备的字体支持感兴趣,您会想了解该GetDeviceCaps功能。

于 2013-05-15T05:00:18.180 回答
1

微软还有其他关于设备上下文的文章,

https://docs.microsoft.com/en-us/windows/win32/gdi/about-device-contexts

应用程序必须通知 GDI 加载特定的设备驱动程序,并且在加载驱动程序后,准备设备进行绘图操作(例如选择线条颜色和宽度、画笔图案和颜色、字体、剪辑区域、等等)。这些任务是通过创建和维护设备上下文 (DC) 来完成的。DC 是一种结构,它定义了一组图形对象及其相关属性,以及影响输出的图形模式。图形对象包括用于画线的笔、用于绘画和填充的画笔、用于复制或滚动屏幕部分的位图、用于定义可用颜色集的调色板、用于剪切和其他操作的区域以及用于绘画和绘图操作。与大多数结构不同,应用程序永远无法直接访问 DC;相反,它通过调用各种函数间接地对结构进行操作。

显然字体是一种绘图。

于 2013-05-15T04:58:50.303 回答
1

Windows API 广泛使用句柄的概念。句柄是一个整数值,您可以将其用作访问 API 资源的令牌。您可以将其视为一种“this”指针,尽管它绝对不是指针。

设备上下文是 Windows API 中的一个对象,它表示您可以在其上绘制或显示图形的东西。它可能是一台打印机、一张位图或一个屏幕,或其他一些在其中创建图形有意义的环境。在 Windows 中,必须先将字体选择到设备上下文中,然后才能使用它们。为了找出任何给定设备上下文中当前可用的字体,您可以枚举它们。这就是 EnumFontFamiliesEx 的用武之地。

于 2013-05-15T04:59:40.620 回答