![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
Lotrex |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 9.2.2006 Где: Казань Репутация: нет Всего: 3 |
Мне надо вычислять длину символьной строки для произвольного шрифта. Все известные мне функции win API возвращают размер шрифта в логических единицах (т.е. для одного и того же шрифта разных размеров возвращается одно и то же значение), а мне надо в пикселах, дабы рассчитывать резмер окошка, что бы она там помещалась.
Функция GetCharABCWidths возвращает вообще какие-то невразумительные значения (а похоже, просто не работает - возвращаемый код не проверял). Желательно бы просто посмотреть на пример, как это делается. Это сообщение отредактировал(а) Lotrex - 19.4.2006, 09:07 |
|||
|
||||
chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 1 Всего: 44 |
GetOutputTextExtent
GetTextExtent Добавлено @ 09:21 вообще, посмотри раздел Text Functions класса CDC в MSDN Это сообщение отредактировал(а) chaos - 19.4.2006, 09:23 |
|||
|
||||
Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: 1 Всего: 10 |
Можно использовать также функцию DrawText с параметром DT_CALCRECT. Правда иногда (зависит от установки бордюра строки) эта функция выдает на 1-3 пиксела меньше размер строки.
-------------------- Пролетал мимо. |
|||
|
||||
Lotrex |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 9.2.2006 Где: Казань Репутация: нет Всего: 3 |
Что-то не нашел я функций GetOutputTextExtent и GetTextExtent в моем хелпе на win API. Нашлась только GetTextExtentPoint, но похоже, она тоже возвращает размеры в логич. единицах:
Я пишу в Borland-e, и поэтому не могу классы MFC использовать. |
|||
|
||||
SergeCpp |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 10 Всего: 124 |
Вот тут есть пример.
![]() Тут я как раз вычисляю размер надписи на часах (в пикселах) — именно то, что Вам нужно. |
|||
|
||||
Lotrex |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 9.2.2006 Где: Казань Репутация: нет Всего: 3 |
Вообще, если честно, то меня волнует, как эти логические единицы (logical units) пересчитывать в пикселы.
Про функцию CDC::GetTextExtent в msdn написано:
Опять эти логические единицы! Функцию GetTextExtentPoint я пробовал, она для строки " 200:" (два пробела, 200:) возвращала у меня всегда одни и те же значения: x = 36, y = 16 для любого размера шрифта Courier! Хоть для шрифта размером 8 пунктов, хоть для шрифта размером 24 пункта! ![]() Добавлено @ 10:44 SergeCpp, Вы какой версией rar-a запаковали Ваш примерчик? За него большое спасибо, тока я его пока распаковать не могу.. Извиняюсь, похоже скачивал неправильно Это сообщение отредактировал(а) Lotrex - 19.4.2006, 10:46 |
|||
|
||||
SergeCpp |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 10 Всего: 124 |
Version to Extract == 2.9
|
|||
|
||||
Lotrex |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 9.2.2006 Где: Казань Репутация: нет Всего: 3 |
Громадное спасибо за помощь. Скачал, разархивировал, буду разбиратся.
|
|||
|
||||
Earnest |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
device coordinates - это и есть пикселы. -------------------- ... |
||||
|
|||||
Lotrex |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 9.2.2006 Где: Казань Репутация: нет Всего: 3 |
Всем спасибо! Решил проблему (как всегда, через .....
![]() ![]()
Коэффициент 11/10 - временно, опосля мож заменю на LPtoDP & etc. |
|||
|
||||
The Thing |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 286 Регистрация: 6.9.2004 Репутация: нет Всего: 3 |
А для чего "11*sz.cx/10;"..
sz как раз и есть координаты квадрата текстовой строки. -------------------- Правильность работы программы зависит от двух велечин. В нужном месте должны стоять нолик и еденичка. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |