Не меняется шрифт

Хохол

Я сохраняю .ttf файл шрифта в ресурсах, динамически загружаю его в PrivateFontFamily и пытаюсь применить к лейблу. Оно работает странно. Шрифт применяется, только если он уже был установлен в системе. Что я не так делаю? Проект прикреплен.
ResourceManager ^r = gcnew ResourceManager(this->GetType());
array<Byte> ^b = (array<Byte>^)r->GetObject("Crysta");
IntPtr p = IntPtr(new Byte[b->Length]);
Marshal::Copy(b,0,p,b->Length);
pfc = gcnew PrivateFontCollection();
pfc->AddMemoryFont(p,b->Length);
label1->Font = gcnew Drawing::Font(pfc->Families[0],14,FontStyle::Italic);
3 ответа

Хохол

*загружаю его в PrivateFontCollectionКажется, я криво с ресурсами работаю.


Хохол

Хотя, с ресурсами вроде все нормально. Вложение я что-то без самого шрифта сделал. Вот новое.


Хохол

Здесь говорят, что нужно провернуть такую штуку:
    [DllImport("gdi32.dll")]
    private static extern IntPtr AddFontMemResourceEx(IntPtr pbFont, **** cbFont, IntPtr pdv, [In] ref **** pcFonts);
Как это перевести на C++/CLI?Перевел, все заработало.
        [DllImport("Gdi32.dll")]
    static IntPtr AddFontMemResourceEx(IntPtr pbFont, int cbFont, int pdv, int *pcFonts);
 
    private: PrivateFontCollection ^pfc;
    public:
        Form1(void)
        {
            InitializeComponent();
 
            ResourceManager ^r = gcnew ResourceManager(this->GetType());
            array<Byte> ^b = (array<Byte>^)r->GetObject("Crysta");
            IntPtr p = IntPtr(new Byte[b->Length]);
            Marshal::Copy(b,0,p,b->Length);
            pfc = gcnew PrivateFontCollection();
            pfc->AddMemoryFont(p,b->Length);
            int cnt = 1;
 
            AddFontMemResourceEx(p,b->Length,0,&cnt);
            label1->Font = gcnew Drawing::Font(pfc->Families[0],14,FontStyle::Italic);
        }
Спасибо всем за помощь