![]() |
|
|
![]()
|
|
| Sawulik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 2.5.2006 Репутация: нет Всего: нет |
Помогите кто может!
Я рисую таблицу в CView с помощью CDC. Мне нужно заполнять эту таблицу текстом из некоторого файла. Ширина текста для каждой ячейки естественно каждый раз разная. Хотелось бы иметь что-то наподобие примочки Word'a, изменяющей ширину символов (без изменения их высоты) и расстояние между символами, чтобы можно было, зная ширину текста и ширину ячейки таблицы, вписать этот текст. В функциях для работы с текстом из MSDN я запуталась. Может есть какие-то мысли или немного другое решение моей проблемы??? Заранее спасибо. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Это тебе каждый раз нужно новый фонт создавать, да и выглядеть будет безобразно... А если строка окажется ну очень длинной?
Но если очень хочешь, то смотри в сторону LOGFONT и CreateFontIndirect. Спроси LOGFONT у своего CDC (чтобы все не заполнять), а потом меняй Width и создавай новый фонт. А в качестве другого решения проблемы могу предложить in-place tooltips (это когда при наведениии мыши в ячейке всплывает полный текст). -------------------- ... |
|||
|
||||
| Sawulik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 2.5.2006 Репутация: нет Всего: нет |
Если строка очень длинная, естественно надо будет переносить, ну а если символ или два не влезают, то лучше будет сжать. Про LOGFONT я знаю, так и делала. Только с изменением ширины шрифта и есть проблема: по умолчанию стоит 0, а когда я сама устанавливаю - криво получается, к тому же у меня zoom еще, и при увеличении / уменьшении картинки нужно ширину шрифта как-то пропорционально изменять, а у меня не получается. Не знаю как...
tooltip по условию задачи мне не подходит, мне в итоге эту таблицу на печать выводить, а tip не выведешь |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
??? В смысле некрасиво? Либо при зуме менять фонт, либо установить логические координаты, не зависящие от масштаба. -------------------- ... |
|||
|
||||
| Sawulik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 2.5.2006 Репутация: нет Всего: нет |
Я не поняла, можно поподробнее? |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Ну, у тебя скорее всего стоит режим MM_TEXT, т.е. то, что по умолчанию в контексте установлено.
Но дело в том, что можно установить и другую систему координат (читай про CDC::SetMapMode). И тогда ты можешь установить, что размер твоей ячейки всегда равен, скажем, 80 * 10, независимо от масштаба. А LOGFONT принимает значения именно в логических кординитах. Просто в режиме MM_TEXT логические координаты == пикселы. Переход между пикселами и логическими координатами: LpToDp, DpToLp. Не могу сказать, насколько это будет удобно, но как вариант. Хотя, если ты все равно хочешь сжимать текст, чтобы влез в ячейку, то с Width разобраться придется. В качестве первого приближения можно попробовать, скажем, разделить желаемую ширину текста на число символов в строке. А еще можно попробовать поменять межсимвольное расстояние (SetTextCharacterExtra). -------------------- ... |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |