System::Drawing::Text::PrivateFontCollection не работает, когда шрифт не установлен
Я попытался добавить шрифт из памяти (встроенный ресурс) и использовать его для своего приложения Windows Form (C++/ Cli)... Код работает, но когда указанный шрифт не установлен на компьютере, текстовое поле использует шрифт по умолчанию вместо моего собственного шрифта. CompatibleTextRenderingDefault имеет значение true.
System::Drawing::Text::PrivateFontCollection^ privateFont = gcnew System::Drawing::Text::PrivateFontCollection();
IO::Stream^ fontStream = Reflection::Assembly::GetExecutingAssembly()->GetManifestResourceStream("textfont.otf");
array<Byte>^ fontData = gcnew array<Byte>(fontStream->Length);
fontStream->Read(fontData, 0, (int)fontStream->Length);
fontStream->Close();
pin_ptr<byte> fontAddress = &fontData[0];
privateFont->AddMemoryFont((IntPtr)fontAddress, fontData->Length);
this->TextBox_Username->Font = gcnew System::Drawing::Font(safe_cast<System::Drawing::FontFamily^>(privateFont->Families[0]), 9.749999F, System::Drawing::FontStyle::Bold);
this->TextBox_Password->Font = gcnew System::Drawing::Font(safe_cast<System::Drawing::FontFamily^>(privateFont->Families[0]), 9.749999F, System::Drawing::FontStyle::Bold);
1 ответ
Оба метода (AddFontFile, AddMemoryFont), доступные для загрузки шрифта в PrivateFontCollection, не полностью поддерживают шрифты OpenType. Вместо этого используйте шрифт TrueType.