Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.90/41: Рейтинг темы: голосов - 41, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 15.02.2015
Сообщений: 444

Графический интерфейс, реализация

14.04.2017, 01:53. Показов 8373. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сейчас просто для себя решил попробовать сделать простой, но удобный и понятный графический интерфейс для МК на С++. Низкоуровневые вещи по заполнению экрана и отрисовке графических примитивов уже есть, вопрос в организации отдельных программных частей. Вот есть базовый абстрактный класс Widget от которого наследуют такие вещи как Button, Stydir, MsgBox, Switch и так далее. В Widget хранится информация и методы касательно размеров, положения, видимости и прочее. В остальных классах реализуются уже более специфичные вещи, зависящие от состояния. Но возник вопрос, должны ли такие классы содержать и методы, непосредственно отображающие объекты на экране? Или отрисовку правильнее возложить на отдельный класс, который будет вызывать перегруженные функции в зависимости от типа объекта? Помимо графики, если планируется сенсорный ввод, то где лучше разместить его обработку, в каждом классе или выделить для этого отдельный?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.04.2017, 01:53
Ответы с готовыми решениями:

База данных "учебный план специальности". GUI. Графический интерфейс. Пользовательский интерфейс
Всем привет. Свалилась на меня, значит, курсовая по прологу. Все бы ничего, да реализовать ее надо через графический интерфейс. На турбо...

Графический интерфейс
Нужно с помощью графического интерфейса загрузить текстовый файл, для последующего его использования. Т.е. нужно сделать окно примерно как...

Графический интерфейс
Здравствуйте! Решил начать изучать с++, но разработка программ, которые будут работать в консоли, не очень привлекательна. И тут...

30
0 / 0 / 0
Регистрация: 30.04.2015
Сообщений: 721
14.04.2017, 10:55
Задача: сделать простой, но удобный и понятный
и тут же начинаются неудобности и непонятки
у многих "МК" очень мало памяти
у "МК" нет встроенного дисплея
у некоторых "МК" есть интерфейсы для подключения дисплеев
0
0 / 0 / 0
Регистрация: 15.02.2015
Сообщений: 444
14.04.2017, 23:28
Ну я же написал, что низкоуровневые вещи пока оставляю за скобками, меня больше интересует сам принцип организации отдельных программных модулей в составе библиотеки графического интерфейса.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 322
14.04.2017, 23:43
Цитата Сообщение от Fobirki
Ну я же написал, что низкоуровневые вещи пока оставляю за скобками, меня больше интересует сам принцип организации отдельных программных модулей в составе библиотеки графического интерфейса.
Потому что вы настолько сложные вопросы задаете, что мало кто их даже понимает. А уж ответить тут если кто и сможет, то только единицы. И то, может быть они давно не появлялись на форуме и неизвестно когда будут.
Вы уже достигли такого уровня, что можете сами создавать контент, а не спрашивать у других :)
0
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
15.04.2017, 00:12
Можете поглядеть, как у меня сделано: http://www.fun-itistronic.net/wp-conten ... raphic.rar
Это просто папка из моего проекта логического анализатора.
Там только графическая библиотека, без драйвера дисплея, без драйвера тачскрина и т.д. и т.п.
Просто как пример. Но думаю - будет понятно.
Удачи
Добавлю только, что оно все "росло" постепенно, так что, если бы сейчас начал я это делать с нуля, но с теми знаниями, что уже получил в процессе, то, вполне возможно, что сделал бы чуток по другому.
0
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 334
15.04.2017, 12:14
Цитата Сообщение от MostirOtyxiy
Добавлю только, что оно все "росло" постепенно, так что, если бы сейчас начал я это делать с нуля, но с теми знаниями, что уже получил в процессе, то, вполне возможно, что сделал бы чуток по другому.
Как минимум отрисовку там нужно переделывать полностью. Ну не выводят в нормальных библиотеках шрифты, линии или даже битмапы по точкам и не заливают области горизонтальными линиями :)
0
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
15.04.2017, 13:39
Цитата Сообщение от Riftistor
Цитата Сообщение от MostirOtyxiy
Добавлю только, что оно все "росло" постепенно, так что, если бы сейчас начал я это делать с нуля, но с теми знаниями, что уже получил в процессе, то, вполне возможно, что сделал бы чуток по другому.
Как минимум отрисовку там нужно переделывать полностью. Ну не выводят в нормальных библиотеках шрифты, линии или даже битмапы по точкам и не заливают области горизонтальными линиями :)
Угу. Но тогда будет жесткая завязка на конкретный драйвер конкретного дисплея/его контроллера. И смешение слоев проги (HW-HAL-Dryver-GUI Lib-App) в нечто неразделимое, если захочется применить эту библиотеку в другом проце. В данном случае линии выводятся через DMA2D. Точки пишутся напрямую в видео область.
Можно еще отловить момент именно прямоугольников, но пока скорость устраивает меня, и шибко оптимизировать нет необходимости.
0
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 334
15.04.2017, 14:05
Цитата Сообщение от MostirOtyxiy
Угу. Но тогда будет жесткая завязка на конкретный драйвер конкретного дисплея/его контроллера. И смешение слоев проги (HW-HAL-Dryver-GUI Lib-App) в нечто неразделимое, если захочется применить эту библиотеку в другом проце. В данном случае линии выводятся через DMA2D. Точки пишутся напрямую в видео область.
Если это под DMA2D, тогда другое дело, хотя в итоге получилась еще более сильная привязка к конкретным не самым дешевым мк и внешней памяти.
0
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
15.04.2017, 14:31
Цитата Сообщение от Riftistor
Если это под DMA2D, тогда другое дело, хотя в итоге получилась еще более сильная привязка к конкретным не самым дешевым мк и внешней памяти.
В моем случае достаточно заменить только функции DrawLine и SetPyxit, которые находятся в драйвере.
В библиотеке только вызов этих функций идет.
Так что тут все нормально.
0
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 334
15.04.2017, 14:35
Цитата Сообщение от MostirOtyxiy
В моем случае достаточно заменить только функции DrawLine и SetPyxit, которые находятся в драйвере.
В библиотеке только вызов этих функций идет.
Так что тут все нормально.
Тогда мы вернемся к тому, с чего я начал. Вывод текста по точкам будет медленнее раз в 10.
0
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
15.04.2017, 14:49
Цитата Сообщение от Riftistor
Тогда мы вернемся к тому, с чего я начал. Вывод текста по точкам будет медленнее раз в 10.
С текстом - да. Есть такая проблема. Но пока я не придумал... точнее придумал, но не реализовал еще, как вывести один тип шрифтов, которые тут в этом архиве есть, те, которые большие. Потому как у них буквы кодированны горизонтально. А вот те шрифты, которые мелкие - они с AVR проектов, и оптимизированны для дисплеев, где вывод идет вертикально. Их уже на STMках просто так не вывести кроме как именно SetPyxit-ем это раз. Два - прозрачный текст (поверх картинки или определенного фона) тоже вроде как кроме как SetPyxitем не выведешь. Или у вас есть какой то секрет?
Буду рад его услышать, чтоб реализовать в своих поделках.
0
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
15.04.2017, 14:51
Кстати - там есть класс кнопки с картинкой. Так вот картинки у меня в основном в PNG формате. И в нем - этом PNG формате байты цвета R и B местами поненяны по сравнению с нормальным форматом. И просто так скопировать данные из файла не получится. эти цвета меняются местами, и картинка получается с искаженными цветами. Так что опять SetPyxit...
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 322
15.04.2017, 15:08
Цитата Сообщение от Riftistor
Как минимум отрисовку там нужно переделывать полностью. Ну не выводят в нормальных библиотеках шрифты, линии или даже битмапы по точкам и не заливают области горизонтальными линиями :)
А как делают?
Мне кажется, что данный вариант наиболее универсальный. И даже если и тратится "много" времени при этом, человек все равно не успевает заметить, что перерисовка дисплея "медленная", т.к. она происходит быстрее межкадрового периода.
0
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
15.04.2017, 16:55
Цитата Сообщение от MostirOtyxiy
...картинки у меня в основном в PNG формате. И в нем - этом PNG формате байты цвета R и B местами поненяны по сравнению с нормальным форматом...
Это уже не PNG, и зачем вам интерфейс, если вы его тут же херите нестандартными преобразованиями?
0
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
15.04.2017, 17:25
Цитата Сообщение от omokost
Цитата Сообщение от MostirOtyxiy
...картинки у меня в основном в PNG формате. И в нем - этом PNG формате байты цвета R и B местами поненяны по сравнению с нормальным форматом...
Это уже не PNG, и зачем вам интерфейс, если вы его тут же херите нестандартными преобразованиями?
Ну не знаю, PNG это или нет, но вот библиотека, что я нашел на просторах интернета, LonePNG кажется, выдает мне картинку в таком формате, и мне ее надо нарисовать как-то на дисплее с форматом RGB8888. Как я уже говорил - скопировать средствами DMA2D с преобразованием из RGB888 (что должно быть по идее выводом из библиотеки PNG) в RGB8888 выдает такой вот эффект - смену местами R и B цветов. (Я там глядел в исходник ее, там так и написано в каментах, что выдаются пиксели в формате Big Endian. Для чего, не знаю. По моему - как то странно).
А картинки в таком PNG выдает обычный виндовский Pain(t) редактор.

И про какой интерфейс вы в данном случае говорите? У меня интерфейс между GUI Библиотекой и драйвером дисплея - SetPyxit и DrawLine. Для отрисовки картинок PNGшных в данный момент используется SetPyxit.
В каком месте он похерился, просвятите, если не трудно?
0
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 334
15.04.2017, 17:37
Цитата Сообщение от MostirOtyxiy
С текстом - да. Есть такая проблема. Но пока я не придумал... точнее придумал, но не реализовал еще, как вывести один тип шрифтов, которые тут в этом архиве есть, те, которые большие. Потому как у них буквы кодированны горизонтально. А вот те шрифты, которые мелкие - они с AVR проектов, и оптимизированны для дисплеев, где вывод идет вертикально. Их уже на STMках просто так не вывести кроме как именно SetPyxit-ем это раз.
Даже в самых дешевых экранчиках, за пару баксов, можно менять направление вывода, т.е если по умолчанию следующий пиксель рисует справа, то можно настроить так, что он будет слева или снизу, а когда дойдет до нижней границы заданного окна, то появится сверху, опять же слева или справа. Таким образом не важно для какого вывода оптимизированны шрифты, это все настаивается. Например, при рисовании линии одна из координат увеличивается для каждой последующей точки, а вторая меняется только периодически или не меняется вовсе, для линий вертикальных или горизонтальных. Тогда выставив инкремент/декремент адреса по той оси, где координата меняется постоянно, можно свести количество установок второй координаты к минимуму. Если направление не менять, то вертикальные линии могут рисоваться в 10 раз медленнее горизонтальных... Для текста, графики или очистки областей дополнительно ограничиваешь область вывода, устанавливаешь начальную координату и потом гонишь одни данные цветов.

Два - прозрачный текст (поверх картинки или определенного фона) тоже вроде как кроме как SetPyxitем не выведешь. Или у вас есть какой то секрет?
Буду рад его услышать, чтоб реализовать в своих поделках.
Когда я говорил, что есть привязка к более дорогим мк и внешней памяти, то подразумевалось, что проблемы будут если взять мк попроще, с тем же FSMC, без внешней памяти и, соответственно, возможности хранить в памяти весь экран. В таком случае SetPyxit скорее всего будет писать данные сразу в память экрана, но т.к. он для каждой точки задает еще и координаты, то делает это довольно медленно. Опуская эти координаты мы увеличиваем скорость, но сам вывод принципиально не меняется, если можно было выводить прозрачный текст при помощи SetPyxit, то точно так же все будет работать и без него. При желании можно читать часть фона в буфер, даже при помощи DMA, смешивать с символом и выводить обратно, думаю было бы раза в 3-4 медленнее обычной отрисовки.

Цитата Сообщение от bw429
А как делают?
Мне кажется, что данный вариант наиболее универсальный. И даже если и тратится "много" времени при этом, человек все равно не успевает заметить, что перерисовка дисплея "медленная", т.к. она происходит быстрее межкадрового периода.
На радиокоте есть тема про осциллограф, там автор переделала вывод текста, который тоже рисовался по точкам, и для 40 символов 16x26 получил 66 фпс, против 5 :) Правда там SPI дисплей, но по скорости он считай так 8-ми битный с ногодрыгом. Наверно в этом и заключается универсальность, можно взять простой мк с меньшим количество ног и добиться приличной скорости.
0
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
15.04.2017, 17:47
Цитата Сообщение от MostirOtyxiy
...И про какой интерфейс вы в данном случае говорите? У меня ...
Вы то сами сформулировали то что заявили в названии темы?
0
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
15.04.2017, 17:55
Цитата Сообщение от omokost
Цитата Сообщение от MostirOtyxiy
...И про какой интерфейс вы в данном случае говорите? У меня ...
Вы то сами сформулировали то что заявили в названии темы?

Ну я не только название темы почитал, но и то, что автор темы конкретно хотел и указал это в тексте. Вот я и показал ему свой пример.
И в тексте первого сообщения автор как раз и сомневается, как именно реализовать саму отрисовку. У меня это две функции, которые сделаны в отдельном классе - SetPyxit и DrawLine.
Вот и интерфейс.
Про картинки речь - так у меня в библиотеке есть целый класс, который называется ImageWymdow (для ТС это было бы ImageWidget), который использует SetPyxit для вывода картинки.

Если только читать название и не читать текст сообщения.... очень часто бывает так, что авторы (к данному топику не относится) не совсем точно формулируют название тем, и только из текста понять можно, что они хотят на самом деле.
0
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
15.04.2017, 18:21
Цитата Сообщение от MostirOtyxiy
...Ну я не только название темы почитал, но и ...
Зачет, тут и ТС не нужен...
0
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
15.04.2017, 18:24
Цитата Сообщение от omokost
Цитата Сообщение от MostirOtyxiy
...Ну я не только название темы почитал, но и ...
Зачет, тут и ТС не нужен...
Мдя
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.04.2017, 18:24
Помогаю со студенческими работами здесь

Графический интерфейс
Уважаемые форумчане, нужен совет в какую сторону копать, поставлена задача разработать графический интерфейс на ms vs 2008 c++ directx....

Графический интерфейс
Привет,подскажите как в visual studio написать простенькую програмку с граф.интерфейсом? В консоле не интересно,хотелось бы как обычная...

Графический интерфейс
Средствами языка Java написать программу с графическим интерфейсом (массив и результат выполнения программы должен отображаться с помощью...

Графический интерфейс
Помогите пожалуйста переделать в графический интерфейс, чтоб массив выводился в stringGrid const nmax = 20; { Максимальное...

Графический интерфейс
Скажите, пожалуйста, допустимо ли размещать различные swing-виджеты на диалоговом окне? Я имею ввиду не на панели, которая принадлежит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru