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。
难道它不应该以这种方式存储吗?
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)。
或者,您始终可以使用RCDATA和RT_RCDATA。