На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
  
> AddFontResource и GdiPlus::Font
    Hi All!

    Есть приложение, которое грузит внешнюю DLL. В DLL рисуется картинка с текстом на GDI+. Шрифт создаётся конструктором
    ExpandedWrap disabled
      Font::Font(WCHAR*,REAL,INT,Unit,FontCollection*)

    два последних параметра по умолчанию.

    Если кинуть свой кастомный шрифт в Windows\Fonts всё работает; если динамически подгружать при помощи AddFontResourceEx перед загрузкой DLL, то вместо кастомного щрифта GDI+ грузит дефолтный Times New Roman (на вид).

    Есть аналогичная DLL но с другой имплементацией отрисовки, в ней шрифт создаётся с помощью другой функции:
    ExpandedWrap disabled
      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 работает нормально.
    Сообщение отредактировано: Lavrik -
      Можно сколько угодно гадать, лучше код покажи.
        Цитата =MOHAX= @
        лучше код покажи

        APP:
        ExpandedWrap disabled
          ...
          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:
        ExpandedWrap disabled
          ...
          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);
          ...
          Вроде все правильно. <_<
          Шрифт отображается не правильно только когда рисуешь из библиотеки или из приложения тоже не получается?
            Цитата =MOHAX= @
            или из приложения тоже не получается

            Так точно, из приложения тоже не рисует (вернее шрифт по факту загружает дефолтный).

            Цитата =MOHAX= @
            Шрифт отображается не правильно

            "Не правильно" - не совсем верное словосочетание. Шрифт то отображается нормально, но не тот который нужно, а дефолтный (т.е. тот, который GDI+ грузит по умолчанию если заданный не найден).
            Видимо эта проблема, которая описана на баг-листе относится не только к .NET приложениям, а вообще к связке GDI+ & AddFontResourceEx.
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0294 ]   [ 16 queries used ]   [ Generated: 28.04.24, 15:09 GMT ]