我在Windows 8.1,Visual Studio 2017中。

我在正在处理的DirectX项目中使用这种pricedown字体。

我用AddFontResourceEx加载它,并用D3DXCreateFont创建它的字体。

当我点击“本地Windows调试器”时,字体呈现一切正常。无论是发布还是 Debug模式。
当我浏览任何可执行文件时,都会出现问题,无论发布还是调试,它都不会渲染上述字体。

因此,我继续阅读,并在需要时阅读了有关msdn,this one和其他文章。

我不认为我做错了什么,我的资源 View 如下所示:

c++ - 使用字体资源进行编译-LMLPHP

,而IDR_FONT1如下所示:

c++ - 使用字体资源进行编译-LMLPHP

该文件将自动加载到解决方案资源管理器中(我没有添加它,VS是从Resource.rc文件中添加的),如您在此处看到的:

c++ - 使用字体资源进行编译-LMLPHP

拥有这些特权:

c++ - 使用字体资源进行编译-LMLPHP

我这样添加它:

AddFontResourceEx("pricedown.ttf", FR_PRIVATE, 0);
this->createFont("Pricedown", 60, true, false);

其中createfont是我添加字体的函数(向下分解,它具有数组):
bool    D3D9Render::createFont(char *name, int size, bool bold, bool italic)
{
    D3DXCreateFont(m_pD3dDev, size, 0, (bold) ? FW_BOLD : FW_NORMAL, 0, (italic) ? 1 : 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH, name, &m_pFont);
    return true;
}

我正在将其编译为x64版本。

就像我说过的那样,当我按下“Local Windows Debugger”(在包括x64版本在内的任何模式下)时,它都可以工作并呈现字体,但是当我转到project/x64/Release时,它只会呈现字体。即使可执行文件的大小也足够。
GetLastError上的AddFontResource为2(ERROR_FILE_NOT_FOUND)

我究竟做错了什么?

最佳答案

(将答案读到最后,否则会浪费很多时间。)

我知道了。我已阅读this博客文章。


HINSTANCE hResInstance = AfxGetResourceHandle( ); //Read the edit

HRSRC res = FindResource(
    hResInstance,
    MAKEINTRESOURCE(IDR_MYFONT),
    L"BINARY"  //Read The Edit
);
if (res)
{
    HGLOBAL mem = LoadResource(hResInstance, res);
    void *data = LockResource(mem);
    size_t len = SizeofResource(hResInstance, res);

    DWORD nFonts;
    m_fonthandle = AddFontMemResourceEx(
        data,       // font resource
        len,       // number of bytes in font resource
        NULL,          // Reserved. Must be 0.
        &nFonts      // number of fonts installed
        );

    if(m_fonthandle==0)
    {
        MessageBox(L"Font add fails", L"Error");
    }
}

虽然您需要afxwin.h,并且来自here:



编辑:

您不需要使用AfxGetResourceHandle(为什么需要afxwin.h),只需执行以下操作:
HINSTANCE hResInstance = (HINSTANCE)GetModuleHandle(NULL);

FindResource中,第三个参数应该是RT_FONT,因此您将获得:
HRSRC res = FindResource(hResInstance, MAKEINTRESOURCE(IDR_FONT1), RT_FONT);

07-26 09:29
查看更多