尝试从资源加载字体时 FindResource 返回 NULL

Sos*_*der 5 c++ winapi embedded-resource

我正在尝试从我的资源加载字体。这是我使用的调用,当前返回 NULL,因此失败:

HRSRC rsrcData = FindResource(NULL, MAKEINTRESOURCE(IDF_ROBOTBLACK), L"FONT");
Run Code Online (Sandbox Code Playgroud)

我将字体资源添加到了 Resource.rc 文件中,该文件现在列出了以下内容:

/////////////////////////////////////////////////////////////////////////////
//
// Font
//

IDF_ROBOTBLACK          FONT                    "Resources\\Fonts\\Roboto\\Roboto-Black.ttf"
Run Code Online (Sandbox Code Playgroud)

此外,这就是我的 Resource.h 的样子:

#define IDF_ROBOTBLACK                  108
Run Code Online (Sandbox Code Playgroud)

据我所知,这应该是整个过程的全部内容。

我已经成功地加载了另一种资源格式“PNG”,它也被添加为新的自定义资源类型,遵循相同的过程,但仅在应有的位置将“FONT”替换为“PNG”。

然而,与我的“PNG”加载方法相比,“FONT”从未找到。无论发生什么情况,FindResource 都会返回 NULL。

GetLastError()返回的错误代码是1813。

我担心的是 .ttf 根本不受支持。我之前向我的解决方案资源添加了各种格式,例如 .exe 和 .png、.jpg,但在添加资源时,文件选择器中甚至没有建议使用 .ttf。

难道它不应该以这种方式存储吗?

Bar*_*ani 4

FONT标准资源类型,与PNG. 因此你必须使用RT_FONT而不是L"FONT".

资源声明可以保留为:

IDF_ROBOTBLACK FONT "filename.ttf"
Run Code Online (Sandbox Code Playgroud)

该资源必须位于如下位置:

FindResource(NULL, MAKEINTRESOURCE(IDF_ROBOTBLACK), RT_FONT); 
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用:

IDF_ROBOTBLACK xfont "filename.ttf"
Run Code Online (Sandbox Code Playgroud)

FindResource(NULL, MAKEINTRESOURCE(IDF_ROBOTBLACK), L"xfont"); 
Run Code Online (Sandbox Code Playgroud)

这会起作用,因为xfont不是标准资源(与PNG)。

或者,您始终可以使用RCDATART_RCDATA