|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
30.07.2017, 22:47 | #1 | |
Регистрация: 30.07.2017
Сообщений: 4
|
WinAPI и получение ширины выводимого текста.
Доброго времени суток. Загружаю текст для вывода в окно, и делаю горизонтальную полосу прокрутки. Действую так:
Гружу текст. Нахожу самую длинную строку(запоминаю кол-во символов) С помощью GetTextExtentPoint32 нахожу длину этой строки в пикселях Делаю полученную длину в пикселях на количество символов и получаю ширину одного символа в пикселях. Выводится всё нормально, но есть проблема со скроллом, а именно: Бегунок, уперевшись до конца вправо, показывает не весь текст. Обновляю скролл по сообщению WM_SIZE, таки образом: Цитата:
И, наконец, вопрос: как верно рассчитать всё это дело? Потребуется весь код - напишите, прикреплю. Большое спасибо. |
|
31.07.2017, 05:51 | #2 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
Шрифт моноширный хоть используется? С самой длинной строкой из одного символа проблема повторяется? Типа там для строки ааааааааааааааааааааааааааааааааа?
|
31.07.2017, 15:37 | #3 |
Регистрация: 30.07.2017
Сообщений: 4
|
Шрифт используется пропорциональный(вообще системный, что по-умолчанию, а он пропорциональный вроде). На удивление, сделав самую длинную строку из символов 'а', всё рассчиталось именно точно под эту строку.
|
31.07.2017, 18:32 | #4 |
Регистрация: 30.07.2017
Сообщений: 4
|
Странно, что в WInAPI такое сумасшествие с настройкой скролла и текста.
Просто относительно недавно начал изучать. Для оси y всё настраивается нормально, высота букв фиксированная,а вот для оси x...В общем проблему с трудом, но решил. Может кому-нибудь понадобится: 1) С помощью GetTextExtentPoint32 получаем длину максимальной строки 2) Выводим текст с помощью DrawText, где правая координата заданного прямоугольника - это длина полученной строки(для всех строк) 3) Длина для горизонтального скролла вычисляется так: 2 + (максимальная длина строки - текущий размер окна) / среднюю ширину символа 2 - это пробелы перед и после строки средняя ширина символа вычисляется по формуле макс. длина строки / кол-во символов в этой строке. Всё. |
31.07.2017, 22:09 | #5 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
|
01.08.2017, 03:40 | #6 |
Регистрация: 30.07.2017
Сообщений: 4
|
Да-да, уже обнаружил, переделал, благодарю.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Получение текста из консольного окна | sk007 | C# (си шарп) | 1 | 28.03.2014 20:13 |
Получение выделенного текста из класса EXCEL6 | MihonMZ | Win Api | 0 | 12.02.2014 16:19 |
Получение Access Tokens в C# (WinAPI) | Vinnnss | Win Api | 0 | 01.03.2013 12:02 |
Упорядочивание выводимого текста. | Natalia86 | Помощь студентам | 1 | 27.11.2009 20:42 |
Изменение размера шрифта выводимого текста в консоле, как побороть? | Artefact | Qt и кроссплатформенное программирование С/С++ | 0 | 26.02.2008 00:28 |