| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Рисование текста в RECT |
| Автор: suxxor 4.5.2012, 16:56 |
| Есть HDC, это картинка, также есть RECT это область на картинке в которой необходимо нарисовать текст. ВОПРОС: Нужно автоматически выбирать размер шрифта для вписывания в RECT. Нужно подобрать максимальный размер шрифта, чтоб текст не вылизал за границы |
| Автор: Amp 4.5.2012, 17:28 |
| Перебираешь размеры шрифта, вызывая GetTextExtentPoint32. Если результат начинает влезать - останавливаешься. Начинаешь с размера шрифта, который заведомо больше высоты заданного RECT. То есть берешь RECT, прибавляешь пару пикселей, переводишь в поинты и задаешь изначальной высотой шрифта. Как-то так. Добавлено через 3 минуты и 24 секунды Либо, получив размер текста, для некоторого шрифта по-умолчанию изменить его размер пропорционально тому насколько он влезает/ не влезает. |
| Автор: suxxor 4.5.2012, 17:43 | ||
поправьте если неправильно |
| Автор: Amp 4.5.2012, 19:18 |
| Если left/top отличны от 0, то right - left, bottom - top. |
| Автор: suxxor 4.5.2012, 19:22 |
| Amp, okay - они NULL осталось вышенаписанный цикл оптимизировать, чтоб уменьшить потребление памяти (к примеру с какой высоты начинать CreateFont итд) |
| Автор: suxxor 4.5.2012, 21:28 |
| и ещё проблема: мне нужно уместить слово (макс. из 4-5 символов) в иконке 32x32, получается нечитаемый текст, как исправить? |
| Автор: suxxor 5.5.2012, 10:51 | ||
Можно пример этих вычислений? Я без этого непонимаю!
Ай, с ним и без него - получается УГ |
| Автор: Amp 5.5.2012, 12:33 | ||
На API не пишу, впрочем из кода итак все понятно:
|
| Автор: suxxor 5.5.2012, 13:18 | ||||
Я так понял что это:
равно этому на WInAPI:
да?? метод SetPointSize это эквивалент CreateFont(*ЭТОГО*, ...)??? |
| Автор: Amp 5.5.2012, 13:37 |
| Судя по документации к CreateFont, MulDiv(...) должен идти со знаком минус. Впрочем, как я понимаю, CreateFont позволяет задавать сразу в высоту в пикселах, если передать ему высоту как положительный аргумент, поэтому можно обойтись без перевода pixel -> point. |