其他分享
首页 > 其他分享> > c – 尝试从资源加载字体时,FindResource返回NULL

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

作者:互联网

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

HRSRC rsrcData = FindResource(NULL, MAKEINTRESOURCE(IDF_ROBOTBLACK), L"FONT");

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

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

IDF_ROBOTBLACK          FONT                    "Resources\\Fonts\\Roboto\\Roboto-Black.ttf"

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

#define IDF_ROBOTBLACK                  108

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

我已经成功地加载了另一种资源格式“PNG”,它也被添加为一种新的自定义资源类型,遵循相同的程序,同时只将“FONT”替换为“PNG”.

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

GetLastError()的错误代码returend是1813.

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

是不是意味着以这种方式存储?

解决方法:

与PNG不同,FONT是standard resource type.因此,您必须使用RT_FONT而不是L“FONT”.

资源声明可以保留为:

IDF_ROBOTBLACK FONT "filename.ttf"

然后必须按如下方式定位资源:

FindResource(NULL, MAKEINTRESOURCE(IDF_ROBOTBLACK), RT_FONT); 

或者,您可以使用:

IDF_ROBOTBLACK xfont "filename.ttf"
FindResource(NULL, MAKEINTRESOURCE(IDF_ROBOTBLACK), L"xfont"); 

这可行,因为xfont不是标准资源(与PNG相同).

或者,您始终可以使用RCDATA和RT_RCDATA.

标签:c,winapi,embedded-resource
来源: https://codeday.me/bug/20190828/1750241.html