Menggunakan File Sumber Daya dengan PrivateFontCollection

Saya menggunakan PrivateFontCollection kelas dalam program c++, dengan file .ttf di folder "Resource Files". Saya ingin dapat melakukan sesuatu seperti ini:

privateFontCollection.AddFontFile(L"Exo-Regular.ttf");

Tetapi satu-satunya cara agar saya dapat membuatnya berfungsi adalah dengan mengaksesnya melalui jalur file lokal, seperti ini:

privateFontCollection.AddFontFile(L"C:\\Users\\maybe\\Desktop\\Exo-Regular.ttf");

person Maybegus    schedule 05.11.2018    source sumber
comment
Perhatikan bahwa GDI+ sebagian besar sudah tidak digunakan lagi; dan hanya sedikit orang yang pernah memprogramnya dalam C++. Apa pun yang Anda lakukan, saya yakin Anda mungkin menggunakan tumpukan teknologi yang salah untuk melakukannya.   -  person HostileFork says dont trust SE    schedule 06.11.2018


Jawaban (1)


Anda tidak dapat melakukan ini dengan AddFontFile() metode; string jalur yang diharapkan tidak dapat diselesaikan ke dalam sumber daya yang tertanam dalam program kompilasi Anda.

Sebagai gantinya, Anda harus menggunakan AddMemoryFont() ...dan berikan pointer ke data sumber daya yang Anda ambil melalui API yang peka terhadap sumber daya.

Ada pertanyaan dari tahun 2013 dengan seseorang yang melakukan ini di C#: "addFontFile from resources". Saya tidak tahu perpustakaan kelas lain apa yang Anda gunakan, tetapi jika Anda memprogram langsung ke Win32, mendapatkan penunjuk dan ukuran untuk font Anda akan terlihat seperti ini:

HMODULE module = NULL; // search current process, override if needed
HRSRC resource = FindResource(module, L"Exo-Regular.ttf", RT_RCDATA);
if (!resource) {...error handling... }
HGLOBAL handle = LoadResource(module, resource);
if (!handle) {...error handling... }

// "It is not necessary to unlock resources because the system
// automatically deletes them when the process that created
// them terminates."
//
void *memory = LockResource(handle);
DWORD length = SizeofResource(module, resource);

privateFontCollection.AddMemoryFont(memory, length);
person HostileFork says dont trust SE    schedule 06.11.2018