ExDUIR
Введение
Lightweight DirectUI framework для платформы Windows.
Этот проект основан на открытом исходном коде ExDirectUI 4.1.18.
Улучшения по сравнению с оригиналом
Пожалуйста, обратитесь к журналу обновлений (CHANGELOG.txt).
Обратная связь и помощь
Среда
win10+
Для win7 требуется установить патч KB2670838.
Запустите ExDUIR на виртуальной машине VMware с операционной системой win7, установите патчи KB2670838 и KB4474419, затем установите VMware Tools.
Компоненту мультимедиа необходимо установить Microsoft.HEVCVideoExtension.Appx для воспроизведения видео в формате H265 mp4.
Компилятор
В настоящее время поддерживаются следующие два метода компиляции:
- Visual Studio 2019 (рекомендуется). ExDUIR.sln. Включает следующие элементы:
- dll: компиляция в динамическую библиотеку. -> libexdui.dll.
- libexdui: компиляция в статическую библиотеку. -> libexdui.lib.
- libexduiCPP: инкапсуляция класса C++ и демонстрация вызова.
- test: тестовый проект.
- Только CMake. Поддерживаются только компиляторы MSVC.
Характеристики
- Функция рендеринга — DirectX11, Direct2D, эффективность в сотни раз выше, чем у GDI.
- Поддержка Unicode, поддержка нескольких языков.
- Имитация механизма обмена сообщениями Windows путём отправки сообщений и распространения уведомлений компонентам, совместимость с собственными сообщениями и константами Windows. Написание Win32 API более гибкое, чем написание классов.
- Вызов методов стиля Win32 API, поддержка создания статической библиотеки lib и динамической библиотеки DLL. Сгенерированную динамически подключаемую библиотеку можно вызывать на других языках, таких как Python, Java, Go, Delphi, C#, VB, EasyLang и т. д.
- Свободные и гибкие компоненты расширения, движок обрабатывает базовую логику. Пользователю нужно только написать код рисования и не беспокоиться о сложной обработке сообщений.
- В настоящее время поддерживается компонент: кнопка, переключатель, радиокнопки, поле выбора, поле редактирования, поле расширенного редактирования текста, список просмотра, шаблон списка просмотра, групповые поля, поля со списком, меню, древовидная структура, ползунок, радиокнопки, поле выбора, TAB, анимация, вращающееся изображение, страница, изображение, окно сообщения, список значков, список кнопок, панель инструментов, строка состояния, поле даты, цветовая палитра, палитра цветов, поле заголовка, поле календаря, кнопка счёта, браузер Cef3, доска для рисования, медиаплеер, выпадающее меню, доска тегов. Можно создавать суперклассы на основе этих компонентов.
- Поддерживается автоматическое обновление позиций компонентов при изменении размера окна. В настоящее время поддерживаются следующие макеты: абсолютный макет, относительный макет, линейный макет, потоковый макет и табличный макет. Пользователи могут расширять макет.
- Автоматическое воспроизведение анимации изображений формата GIF, поддерживаемые форматы изображений: PNG, JPEG, BMP, GIF, DDS, ICON. Окна или компоненты могут использовать изображения указанных форматов в качестве фона.
- 34 типа замедления, пользователи могут свободно писать замедление окон или компонентов. Пользователи могут расширить алгоритм замедления.
- Окна поддерживают окна специальной формы, окна формы изображения. Окна и компоненты поддерживают прозрачность от 0 до 255. Поддерживает размытие по Гауссу.
- Поле редактирования поддерживает форматированный текст и поддерживает загрузку документов в формате RTF.
- Окна или компоненты могут получать перетаскиваемые файлы или текст.
- Поддержка модальных окон.
- Поддержка уведомлений об ограниченных областях.
Концепции рисования окон
- Графический интерфейс основан на окнах и механизме обмена сообщениями. Элементы управления рисуются в окне и реагируют на сообщения, такие как мышь и клавиатура, для реализации функциональности. Например, когда мышь перемещается над кнопкой, нажатие на неё вызовет событие нажатия кнопки и изменит состояние отрисовки кнопки на нажатое. Рисование окон и элементов управления использует либо GDI, либо DirectX, последний намного быстрее благодаря использованию аппаратного ускорения GPU.
- ExDuiR использует DirectX (DirectX 11 и Direct2D) для рисования, чтобы использовать ускорение графического процессора, и подклассы окон для включения пользовательского рисования и обработки сообщений.
Общий дизайн
- ExDuiR предоставляет API в виде функций. to allow compiling into DLLs for use by other languages.
- ExDuiR включает пользовательские базовые классы, такие как Array, HandleTable, HashTable, Theme, Resource, Easing, ImageList, Layout, MemPool, Thread, DropTarget.
- Базовые классы для рисования включают Brush, Canvas, Font, Image, Matrix, Path, Region, StrokeStyle.
Extension component description
Ex_ObjRegister регистрирует класс компонента, рисует компонент в сообщении WM_PAINT в обратном вызове и другие сообщения контролируют состояние компонента. Создайте компонент с именем класса. Количество свойств, требуемых компонентом, устанавливается в cbObjextra Ex_ObjRegister, и каждое имеет размер по умолчанию 8 байт. Используйте индекс, начинающийся с 0 (отрицательные числа являются встроенными индексами для базового компонента, не используйте). Используйте Ex_ObjSetLong для установки свойств и Ex_ObjGetLong для получения свойств.
- Можно создать суперкласс для расширения компонента на class_rotateImageBox_ex.cpp поверх обратных вызовов базового компонента, которые по умолчанию возвращают Ex_ObjCallProc.
- Вы можете настроить обратный вызов расширения компонента для ссылки на class_titlebar_ex.cpp. По умолчанию обратный вызов возвращает Ex_ObjDefProc.
Компонент рисования начинается с вызова Ex_ObjBeginPaint, передавая структуру рисования, и заканчивается вызовом Ex_ObjEndPaint.
Demo
demo_all:

demo button and switch:

demo buttonex:

demo combobox:

demo custom menu:

demo custom background:

demo drag obj:

demo drop and drag:

demo easing:

demo edit and richedit:

demo editex:

demo groupbox:

demo iconlistview:

demo irregular shape window:

demo label and background:

demo layout-absolute:

demo layout-flow:

demo layout-linear:

demo layout-relative:

demo layout-table:

demo listview:

demo loading:

demo matrix:

demo menubutton:

demo messagebox:

demo navbutton:

demo nchitest:

demo progressbar:

demo radio and checkbox:

demo reportlistview:

demo rotatebox:

demo sliderbar:

demo treeview:

demo modal:

demo titlebar:

demo datebox:

demo palette:

demo color picker:

demo calendar:

demo cefbrowser:

demo score button:

demo template listview: ### демонстрационная доска для рисования:

демонстрационная сетка свойств:

демо-версия медиаплеера:

демо-версия SVG:

демо-версия карусели:

демо-версия ролл-меню:

демо-версия лотка:

демо-версия маски:

демонстрационный редактор тегов:

демонстрация эффекта:

демонстрация работы с контуром и областью:

Комментарии ( 0 )