| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Как вычислить длину строки в пикселах? |
| Автор: Lotrex 19.4.2006, 09:06 |
| Мне надо вычислять длину символьной строки для произвольного шрифта. Все известные мне функции win API возвращают размер шрифта в логических единицах (т.е. для одного и того же шрифта разных размеров возвращается одно и то же значение), а мне надо в пикселах, дабы рассчитывать резмер окошка, что бы она там помещалась. Функция GetCharABCWidths возвращает вообще какие-то невразумительные значения (а похоже, просто не работает - возвращаемый код не проверял). Желательно бы просто посмотреть на пример, как это делается. |
| Автор: chaos 19.4.2006, 09:21 |
| GetOutputTextExtent GetTextExtent Добавлено @ 09:21 вообще, посмотри раздел Text Functions класса CDC в MSDN |
| Автор: Fin 19.4.2006, 09:40 |
| Можно использовать также функцию DrawText с параметром DT_CALCRECT. Правда иногда (зависит от установки бордюра строки) эта функция выдает на 1-3 пиксела меньше размер строки. |
| Автор: Lotrex 19.4.2006, 10:19 | ||
Что-то не нашел я функций GetOutputTextExtent и GetTextExtent в моем хелпе на win API. Нашлась только GetTextExtentPoint, но похоже, она тоже возвращает размеры в логич. единицах:
Я пишу в Borland-e, и поэтому не могу классы MFC использовать. |
| Автор: SergeCpp 19.4.2006, 10:25 |
http://sergecpp.mylivepage.ru/file/1/2/ClockSrc.rar![]() Тут я как раз вычисляю размер надписи на часах (в пикселах) — именно то, что Вам нужно. |
| Автор: Lotrex 19.4.2006, 10:38 | ||
| Вообще, если честно, то меня волнует, как эти логические единицы (logical units) пересчитывать в пикселы. Про функцию CDC::GetTextExtent в msdn написано:
Опять эти логические единицы! Функцию GetTextExtentPoint я пробовал, она для строки " 200:" (два пробела, 200:) возвращала у меня всегда одни и те же значения: x = 36, y = 16 для любого размера шрифта Courier! Хоть для шрифта размером 8 пунктов, хоть для шрифта размером 24 пункта! Добавлено @ 10:44 SergeCpp, Вы какой версией rar-a запаковали Ваш примерчик? За него большое спасибо, тока я его пока распаковать не могу.. Извиняюсь, похоже скачивал неправильно |
| Автор: SergeCpp 19.4.2006, 10:47 |
| Version to Extract == 2.9 |
| Автор: Lotrex 19.4.2006, 11:05 |
| Громадное спасибо за помощь. Скачал, разархивировал, буду разбиратся. |
| Автор: Lotrex 19.4.2006, 21:11 | ||
Всем спасибо! Решил проблему (как всегда, через .....
Коэффициент 11/10 - временно, опосля мож заменю на LPtoDP & etc. |
| Автор: The Thing 30.4.2006, 14:24 |
| А для чего "11*sz.cx/10;".. sz как раз и есть координаты квадрата текстовой строки. |