Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.226.187.24] |
|
Сообщ.
#1
,
|
|
|
Hi All!
Есть приложение, которое грузит внешнюю DLL. В DLL рисуется картинка с текстом на GDI+. Шрифт создаётся конструктором Font::Font(WCHAR*,REAL,INT,Unit,FontCollection*) два последних параметра по умолчанию. Если кинуть свой кастомный шрифт в Windows\Fonts всё работает; если динамически подгружать при помощи AddFontResourceEx перед загрузкой DLL, то вместо кастомного щрифта GDI+ грузит дефолтный Times New Roman (на вид). Есть аналогичная DLL но с другой имплементацией отрисовки, в ней шрифт создаётся с помощью другой функции: HFONT CreateFont( int nHeight, // height of font int nWidth, // average character width int nEscapement, // angle of escapement int nOrientation, // base-line orientation angle int fnWeight, // font weight DWORD fdwItalic, // italic attribute option DWORD fdwUnderline, // underline attribute option DWORD fdwStrikeOut, // strikeout attribute option DWORD fdwCharSet, // character set identifier DWORD fdwOutputPrecision, // output precision DWORD fdwClipPrecision, // clipping precision DWORD fdwQuality, // output quality DWORD fdwPitchAndFamily, // pitch and family LPCTSTR lpszFace // typeface name ); В этом случае динамически регистрируемый шрифт выбирается и рисуется без проблем. В чём проблема? В несовместимости Gdiplus::Font и AddFontResourceEx? Вызываю GetLastStatus у созданного щрифта, результат "Ok".. ADDED: В интернете наткнулся на вот это: http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=241135#details Схожая проблема, за исключением одной вещи - там ведется речь ".NET application". У меня же никакого .NET не наблюдается. Хотя симптомы один в один: Цитата Loading a font using AddFontResource or AddFontResourceEx ... Creating a System.Drawing.Font instance is impossible as well - the font falls back to defaults. Пока что есть одна версия - AddFontResourceEx и GDI+'шный Font не работают вместе (безотносительно .NET или non-.NET). GDI'шная CreateFont работает нормально. |
Сообщ.
#2
,
|
|
|
Можно сколько угодно гадать, лучше код покажи.
|
Сообщ.
#3
,
|
|
|
Цитата =MOHAX= @ лучше код покажи APP: ... AddFontResourceEx(L"E:\\ESAM.ttf", FR_PRIVATE, 0); ... m_hDll = LoadLibrary_ED2D(L"ESAM"); ... // calling some drawing function ... FreeLibrary(m_hDll); ... RemoveFontResourceEx(L"E:\\ESAM.ttf", FR_PRIVATE, 0); ... DLL: ... m_graphics = new Gdiplus::Graphics(hdc); ... m_font = new Gdiplus::Font(L"ESAM", height, fontstyle, Gdiplus::UnitPixel); m_graphics->DrawString(text, (int)_tcslen(text), m_font, Gdiplus::RectF(m_x, m_y, 0.0, 0.0), m_stringformat, m_solidbrush); ... |
Сообщ.
#4
,
|
|
|
Вроде все правильно.
Шрифт отображается не правильно только когда рисуешь из библиотеки или из приложения тоже не получается? |
Сообщ.
#5
,
|
|
|
Цитата =MOHAX= @ или из приложения тоже не получается Так точно, из приложения тоже не рисует (вернее шрифт по факту загружает дефолтный). Цитата =MOHAX= @ Шрифт отображается не правильно "Не правильно" - не совсем верное словосочетание. Шрифт то отображается нормально, но не тот который нужно, а дефолтный (т.е. тот, который GDI+ грузит по умолчанию если заданный не найден). Видимо эта проблема, которая описана на баг-листе относится не только к .NET приложениям, а вообще к связке GDI+ & AddFontResourceEx. |