2017-07-05 53 views
0

我在Windows 8.1,visual studio 2017.使用字體資源編譯

我在我正在使用的directx項目中使用這個定價字體。

我用AddFontResourceEx加載它,並用D3DXCreateFont爲它創建一個字體。

當我點擊「本地Windows調試器」時,一切都很好,字體呈現。無論是在發佈或調試模式。 問題出現在我通過任何可執行文件時,它從不呈現所述字體,無論是釋放還是調試。

所以我去讀了,我讀了msdn,this one和其他需要的文章。

我不覺得我做錯什麼,我的資源視圖看起來是這樣的:

Resource View

,並IDR_FONT1看起來是這樣的:

enter image description here

文件自動加載到解決方案資源管理器中(我沒有添加它,VS從Resource.rc文件中),如下所示:

enter image description here

有了這些禮節:

enter image description here

我添加它,像這樣:

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版本。

正如我所說的,當我按「本地Windows調試器」(任何模式,包括x64發行版)時,它都能正常工作並呈現字體,但是當我轉到project/x64/Release時,它不會呈現字體。即使可執行文件大小也足夠了。

GetLastErrorAddFontResource爲2(ERROR_FILE_NOT_FOUND)

我在做什麼錯?

+0

你爲什麼要使用傳統的Direct3D 9,如果你使用的是Windows 8.1嗎?請記住,「D3DX9」已被棄用,DirectX SDK本身也是如此。如果您打算在VS 2017中使用舊版DirectX SDK,請務必閱讀[MSDN頁面]的底部(https://msdn.microsoft.com/zh-cn/library/windows/desktop/ee663275.aspx )以獲得有關正確設置include/lib路徑的詳細信息,以便將舊的DXSDK與您正在使用的較新的Windows 10 SDK混合使用。另見[沒有D3DX的生活](https://blogs.msdn.microsoft.com/chuckw/2013/08/20/living-without-d3dx/)。 –

回答

0

(閱讀答案才結束,否則你會浪費很多時間。)

我知道了。我讀過this博客文章。

這裏是一個關於如何在嵌入資源中的字體文件上使用AddFontMemResourceEx的例子。

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。ħ,並從here

afxwin.h是MFC和不包含在VC++ (快捷版)的自由版本MFC


編輯:

你不需要使用AfxGetResourceHandle(爲什麼你需要afxwin.h),你可以簡單地做:

HINSTANCE hResInstance = (HINSTANCE)GetModuleHandle(NULL); 

而在FindResource,第三個參數應爲RT_FONT,所以你會得到:

HRSRC res = FindResource(hResInstance, MAKEINTRESOURCE(IDR_FONT1), RT_FONT);