FindResource试图从资源加载字体时返回NULL
FindResource returns NULL when trying to load a font from resources
我正在尝试从资源中加载字体。这是我使用的呼叫,目前返回null,因此失败:
HRSRC rsrcData = FindResource(NULL, MAKEINTRESOURCE(IDF_ROBOTBLACK), L"FONT");
我将字体资源添加到我的资源。RC文件,现在列出以下内容:
/////////////////////////////////////////////////////////////////////////////
//
// Font
//
IDF_ROBOTBLACK FONT "Resources\Fonts\Roboto\Roboto-Black.ttf"
此外,这是我的资源。H的样子:
#define IDF_ROBOTBLACK 108
据我所知,这应该是整个过程的全部。
我已经成功地设法加载了另一种资源格式" PNG",该格式也被添加为一种新的自定义资源类型,遵循相同的过程,同时仅将" png"替换为" png"。<<<<<<<<。/p>
但是,与我的" PNG"加载方法相比,从未找到"字体"。FindResource返回null,无论发生什么情况。
getlastror()的错误代码retrend Retrend是1813。
我担心的是.ttf根本没有真正支持。我之前添加了所有类型的格式,例如.exe和.png,.jpg,但是在添加资源时,在文件选择器中甚至没有建议.ttf。
它不是要以这种方式存储吗?
FONT
是一种标准资源类型,与PNG
不同。因此,您必须使用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
。
findResource之后您在哪里加载资源?
if (rsrcData)
{
HGLOBAL hGlob = NULL;
if (HGLOBAL hGlob = LoadResource(inj_hModule, rsrcData))
{
DWORD dwResSize = SizeofResource(inj_hModule, rsrcData);
std::cout << "Ressource Found size 0x" << std::hex << dwResSize << std::endl;
LPVOID pRes = LockResource(hGlob);
std::cout << "Ressource Found at 0x" << std::hex << pRes << std::endl; ...
这是一项已知的测试,对内存的位置以及您的字体成本如何。
1。在此步骤中:一个小功能运行和测试。尝试将所有资源字体添加到您的项目中。
static void GetFont(HMODULE module, LPCSTR resource, std::string name) {
if (exists(path(name))) return;
HGLOBAL res_handle = NULL;
HRSRC res;
char * res_data;
DWORD res_size;
// We miss error handling on most of them - be careful!
res = FindResource(module, resource, RT_RCDATA);
if (!res) return;
res_handle = LoadResource(module, res);
if (!res_handle) return;
res_data = (char*)LockResource(res_handle);
res_size = SizeofResource(module, res);
std::ofstream stream;
stream.open(name, std::ios::binary);
stream.write(res_data, res_size);
stream.close();
AddFontResource(name.c_str());
}
- 将它们添加到注册表中(您需要禁用UAC或询问用户许可)
您可以看
hkey_local_machine software Microsoft Microsoft Windows NT CurrentVersion Fonts查看如何做。
完成所有字体后,您可以广播更改
SendMessage(hWnd, WM_FONTCHANGE, 0, 0);
在Isurface
中调用此功能virtual void ResetFontCaches() = 0;
测试和GL:)
Interfaces::Surface()->SetFontGlyphSet(font, XorStr("Open Sans Bold"), 22, 300, 0, 0, FONT_CREATE_ANTIALIASED);
您要适应您的上下文渲染,问候。
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 什么时候在C++中返回常量引用是个好主意
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何获取std::result_of函数的返回类型
- QueryWorkingSet总是返回false
- (C++)分析树以计算返回错误值的简单算术表达式
- 访问者访问变体并返回不同类型时出错
- 在C++中测量postscript字体宽度
- 如何返回一个类的两个对象相加的结果
- OpenInventor从9.8升级到10.4.2后,GLSL纹理返回零
- lower_bound()返回最后一个元素
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 如何取消对nullptr的屏蔽,返回正确的对象
- 奇怪的结构&GCC&clang(void*返回类型)
- 架构决策:返回std::future还是提供回调
- 从python中调用C++函数并获取返回值
- FindResource试图从资源加载字体时返回NULL