![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| suxxor |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 14.10.2010 Репутация: нет Всего: нет |
Есть HDC, это картинка, также есть RECT это область на картинке в которой необходимо нарисовать текст.
ВОПРОС: Нужно автоматически выбирать размер шрифта для вписывания в RECT. Нужно подобрать максимальный размер шрифта, чтоб текст не вылизал за границы Это сообщение отредактировал(а) suxxor - 4.5.2012, 16:59 |
|||
|
||||
| Amp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: нет Всего: 17 |
Перебираешь размеры шрифта, вызывая GetTextExtentPoint32. Если результат начинает влезать - останавливаешься. Начинаешь с размера шрифта, который заведомо больше высоты заданного RECT. То есть берешь RECT, прибавляешь пару пикселей, переводишь в поинты и задаешь изначальной высотой шрифта. Как-то так.
Добавлено через 3 минуты и 24 секунды Либо, получив размер текста, для некоторого шрифта по-умолчанию изменить его размер пропорционально тому насколько он влезает/ не влезает. |
|||
|
||||
| suxxor |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 14.10.2010 Репутация: нет Всего: нет |
поправьте если неправильно Это сообщение отредактировал(а) suxxor - 4.5.2012, 19:19 |
|||
|
||||
| Amp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: нет Всего: 17 |
Если left/top отличны от 0, то right - left, bottom - top.
|
|||
|
||||
| suxxor |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 14.10.2010 Репутация: нет Всего: нет |
Amp, okay - они NULL
осталось вышенаписанный цикл оптимизировать, чтоб уменьшить потребление памяти (к примеру с какой высоты начинать CreateFont итд) Это сообщение отредактировал(а) suxxor - 4.5.2012, 19:25 |
|||
|
||||
| suxxor |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 14.10.2010 Репутация: нет Всего: нет |
и ещё проблема: мне нужно уместить слово (макс. из 4-5 символов) в иконке 32x32, получается нечитаемый текст, как исправить?
|
|||
|
||||
| Amp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: нет Всего: 17 |
Как я и писал - составить пропорцию. Например высота и ширина области 32 на 100. 32 пиксела - это 24 поинта (если брать стандартный dpi равный 96). Выставляем такой шрифт, получаем размер текста. Если он по ширине влезает - ок. В противном случае вычисляем размер шрифта как 24 * (ширина области, в данном случае 100) / (ширина полученного текста) и от этого пляшем. Как-то так, думаю, что должно сработать.
Может отрисовывать текст без сглаживания? |
|||
|
||||
| suxxor |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 14.10.2010 Репутация: нет Всего: нет |
Можно пример этих вычислений? Я без этого непонимаю!
Ай, с ним и без него - получается УГ Это сообщение отредактировал(а) suxxor - 5.5.2012, 10:52 |
|||
|
||||
| Amp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: нет Всего: 17 |
На API не пишу, впрочем из кода итак все понятно:
|
|||
|
||||
| suxxor |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 14.10.2010 Репутация: нет Всего: нет |
Я так понял что это:
равно этому на WInAPI:
да?? метод SetPointSize это эквивалент CreateFont(*ЭТОГО*, ...)??? |
||||
|
|||||
| Amp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: нет Всего: 17 |
Судя по документации к CreateFont, MulDiv(...) должен идти со знаком минус. Впрочем, как я понимаю, CreateFont позволяет задавать сразу в высоту в пикселах, если передать ему высоту как положительный аргумент, поэтому можно обойтись без перевода pixel -> point.
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |