Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > WinAPI
Перезагрузить страницу Подбор параметров шрифта
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
c++ c++ вне форума
Member
 
Сообщений: 962
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 31.12.2003
По умолчанию Подбор параметров шрифта - 10.04.2006, 18:25

Я не могу разобраться со следующей проблемой.
Дано: прямоугольник, мультистрочный текст, имя шрифта. Нужно подобрать такие размеры шрифта, чтобы текст точно вписывался в прямоугольник. Данная сцена отрисовывается с очень большой частотой.

Можно, конечно, решать задачу так: подобрать примерно нужную высоту шрифта (это сделать у меня можно), потом вызвать DrawText с флагом DT_CALCRECT, сравнить с заданным прямоугольником, подкрутить еще высоту шрифта и т.д. Т.е. некий сходящийся алгоритм. Но он уж очень страшный.
Thanx.
Ответить с цитированием
  (#2 (permalink)) Старый
SeregaLBN SeregaLBN вне форума
Member
 
Сообщений: 19
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.08.2004
По умолчанию Re: Подбор параметров шрифта - 12.04.2006, 13:53

Я решил у себя такую же проблему тоже сходящимся алгоритмом:
1. Есть контекст hCDC на который навязую нужный шрифт с меняемыми размерами
2. и с помощь ф-ции GetTextExtentPoint32 узнаю в какой размер вписывается указанная строка на этом графическом контексе.
Код:
               TCHAR str[] = TEXT("0 1 2 3 4 5 6 7 8 9 ?");
               SIZE size;

               SetBkMode   (hCDC, TRANSPARENT);
               SetTextColor(hCDC, RGB(0, 0, 0));

               GetClientRect(hWnd, &Rect);
               HFONT hFontOld;
               m_Font.lfHeight = 0;
               do {
                  m_Font.lfHeight++;
                  hFontOld = (HFONT)SelectObject(hCDC, CreateFontIndirect(&m_Font));

                  GetTextExtentPoint32(hCDC, str, lstrlen(str), &size);

                  DeleteObject(SelectObject(hCDC, hFontOld));
               } while (size.cx < (Rect.right-Rect.left));
               Skin.m_Font.lfHeight--;
               hFontOld = (HFONT)SelectObject(hCDC, CreateFontIndirect(&m_Font));
               DrawText(hCDC, str, -1, &Rect, DT_CENTER); // ExtTextOut(hCDC, 0,0, ETO_CLIPPED, &Rect, str, lstrlen(str), NULL);
               DeleteObject(SelectObject(hCDC, hFontOld));
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VIP установка шрифта в окне bvnnet Prolog 31 23.07.2010 12:12
На принтере отбражается тень шрифта Август Любые вопросы от новичков 8 21.07.2010 19:52
Delphi7 - где изменить размер шрифта? NeloS Любые вопросы от новичков 3 10.04.2010 17:37
Использование шрифта fixedsys LPproger PHP 3 29.11.2007 20:05
Подгрузка не стандартного шрифта Александр Рябов DHTML, JavaScript, VBScript 0 18.10.2006 18:24
Установка русского шрифта в программный код Anonymous Вопросы начинающих программистов 2 06.07.2006 20:18
Как получить имя файла шрифта зная имя шрифта Лёлик2 C++ Builder 0 06.05.2006 23:37
Размер системного шрифта Imba .NET 1 03.05.2006 15:09
Смена шрифта кнопки LenaS Visual C++ 4 25.05.2005 13:48
CSS и размер шрифта в резиновой верстке Anonymous DHTML, JavaScript, VBScript 6 26.01.2004 10:39
Распознание русского шрифта Anonymous Java 3 17.09.2003 16:38



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов