Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2010, 19:56   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Узнать ширину текста

Есть ли в WinAPI функа для того, чтобы узнать ширину заданного текста с заданным шрифтом и заданным размером шрифта? Или хотя бы что-нибудь подобное?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 18.12.2010, 20:10   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

1. 1
2. google
BOBAH13 вне форума Ответить с цитированием
Старый 18.12.2010, 20:11   #3
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Боюсь ошибиться, но может что-то типа этого:
-GetCharABCWidths
-GetCharWidth32

Хотя не очень понятно, что такое "в логических единицах измерения" (in logical units).
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru

Последний раз редактировалось Ulex; 18.12.2010 в 20:17.
Ulex вне форума Ответить с цитированием
Старый 18.12.2010, 20:26   #4
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

А у меня тогда два встречных вопроса -
1. Тот же, что и у Ulex - что есть Logical units
2.
Цитата:
lpString [in]

A pointer to a buffer that specifies the text string. The string does not need to be null-terminated, because the c parameter specifies the length of the string.
Если это не PAnsiChar, то что это?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 18.12.2010, 21:00   #5
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Ну ребят, что за детский сад? Давайте я вам расскажу что в таких случаях обычно делают программисты:
1. Смотреть примеры (прямо на msdn по той же ссылке)
2. Искать решения по составным частям вопроса "logical", "text width" и др.
3. А главное пробовать и смотреть что за результаты

p.s. вы уж простите за искренность

UPD:
Цитата:
c [in]
The length of the string pointed to by lpString.
Вы решили не дочитывать? А Ansi или Wide это char'ы, смотреть на функции с потфиксами A или W соответственно.

Последний раз редактировалось BOBAH13; 18.12.2010 в 21:13.
BOBAH13 вне форума Ответить с цитированием
Старый 18.12.2010, 21:24   #6
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Так, ладно, предположим, что длину заданного текста получить удалось, теперь обратная задача стоит - есть допустимая ширина (например 200 px), необходимо узнать, сколько символов необходимо, чтобы её заполнить. Перебор, я так понимаю, слишком долгое запятие.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 18.12.2010, 21:25   #7
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
Так, ладно, предположим, что длину заданного текста получить удалось, теперь обратная задача стоит - есть допустимая ширина (например 200 px), необходимо узнать, сколько символов необходимо, чтобы её заполнить. Перебор, я так понимаю, слишком долгое запятие.
Я делал через перебор в принципе быстро.

UPD:
Пробовать, пробовать и еще раз.

Последний раз редактировалось BOBAH13; 18.12.2010 в 21:29.
BOBAH13 вне форума Ответить с цитированием
Старый 18.12.2010, 21:28   #8
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Да вот дело в том, что (уже не сочтите за велосипед) это будет основа TEdit. При каждой отрисовке на слое будет отрисовываться текст по размеру соизмеримый с TEdit (чтобы не рисовать весь текст). Так что скорось здесь критична.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 30.12.2010, 10:37   #9
DinoAsm
Пользователь
 
Аватар для DinoAsm
 
Регистрация: 29.10.2010
Сообщений: 31
Лампочка

Для этого в gdi32.dll есть функция GetTextExtentPoint32. Вот описание (прям из win32.hlp):
Код:
BOOL GetTextExtentPoint32(

    HDC hdc,	// handle of device context 
    LPCTSTR lpString,	// address of text string 
    int cbString,	// number of characters in string 
    LPSIZE lpSize 	// address of structure for string size  
   );
Последний параметр - указатель на структуру SIZE. Если функция выполнена успешно, то возвращает "nonzero".
В гостях - хорошо. Дома – лучше. В пути туда и обратно - терпимо. Стоять в проходе и по пол часа прощаться – ужасно.
DinoAsm вне форума Ответить с цитированием
Старый 30.12.2010, 10:51   #10
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
Сообщение от DinoAsm Посмотреть сообщение
Для этого в gdi32.dll есть функция GetTextExtentPoint32. Вот описание (прям из win32.hlp):
Код:
BOOL GetTextExtentPoint32(

    HDC hdc,	// handle of device context 
    LPCTSTR lpString,	// address of text string 
    int cbString,	// number of characters in string 
    LPSIZE lpSize 	// address of structure for string size  
   );
Последний параметр - указатель на структуру SIZE. Если функция выполнена успешно, то возвращает "nonzero".
В следующий раз, перед тем как отвечать, почитайте тему, может быть вы повторяете уже сказанное
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать длину текста в пикселях Don Karleone Общие вопросы Delphi 5 16.10.2010 15:51
Получить ширину выделенного текста Word GeoZ Microsoft Office Word 2 29.09.2010 16:35
Как узнать выравнивание текста в RichEdit? Kib Общие вопросы Delphi 6 23.08.2010 15:36
Подогнать ширину текста по ширине ячейке StringGrid Neko13 Общие вопросы Delphi 8 21.06.2010 10:46
Как узнать ширину панели "Пуск" Port 111 Win Api 6 01.02.2009 23:05