如何加载自定义字体,以便我可以在DirectX中使用它们?

时间:2012-12-13 13:45:46

标签: c++ memory fonts directx loading

您好我正在使用DirectX进行游戏,我知道如何创建字体并使用该字体绘制文本,这就是我的工作方式。

这里我创建了我的字体。

D3DXCreateFont(D3DDevice, // The device
               20,                        // Font size
               0,                         // Default width
               FW_NORMAL,                 // Font weight
               1,                         // MipMap
               false,                     // Italic
               DEFAULT_CHARSET,           // Charset
               OUT_DEFAULT_PRECIS,        // Output precision
               DEFAULT_QUALITY,           // Quality
               DT_LEFT | DT_TOP,          // Default pitch & family
               "Arial",                   // Font name
               &ArialFont);               // Font object

这是我显示字体时的RECT

RECT FontRect;
FontRect.left          = 50;         // xPos
FontRect.top           = 50;         // yPos
FontRect.right         = 800;        // maxX Cutoff
FontRect.bottom        = 600;        // maxY Cutoff

我在这里显示我的字体。

ArialFont->DrawTextA(NULL,                                  // Sprite
                     "Test Text",                           // Text
                     strlen("Test Text"),                   // Text length
                     &FontRect,                             // The font RECT
                     DT_LEFT | DT_TOP,                      // Format
                     D3DXCOLOR_XRGB(255, 255, 255));        // Color

但你可以看到,当我创建我的字体时,倒数第二个参数只是字体名称,因为我只需要写出名称就意味着必须将该字体安装到我的电脑中吗? 现在我的问题是如何将文件中的字体加载到内存中,或者只是在运行此程序时,我可以使用“自定义字体”?

1 个答案:

答案 0 :(得分:2)

您可以在程序开头临时安装自定义字体(例如.ttf文件)。因此,您可以使用WinApi方法AddFontResourceEx()msdn-doc)将字体加载到系统。如果您使用FR_PRIVATE标记它,它只能用于您的流程,并会在流程终止时自动删除。使用RemoveFontResourceEx()msdn-doc),您可以手动将其删除。在DirectX中使用已安装的字体只需通过它的名称。