ExDUIR
Английский
简介
Windows平台轻量DirectUI框架。
Данный проект основан на ExDirectUI 4.1.18, открытой версии, которая была переписана.
Улучшения по сравнению с оригинальной версией
Пожалуйста, проверьте журнал обновлений.
Обратная связь и помощь
Система запуска
Win10+
Для Win7 требуется установить KB2670838.
Виртуальная машина VMware Win7 запускает ExDUIR. Сначала установите KB2670838 и KB4474419, затем установите VMware Tools.
Компоненты мультимедиа для воспроизведения H265 MP4 требуют установки Microsoft.HEVCVideoExtension.Appx.
Компиляция
В настоящее время поддерживаются следующие два метода компиляции:
- Visual Studio 2019 или 2022.
Файл проекта ExDUIR.sln. Включает следующие проекты:
- dll: можно скомпилировать совместимую динамическую библиотеку ExDirectUI. -> libexdui.dll
- libexdui: компилируется как статическая библиотека. -> libexdui.lib
- libexduiCPP: демонстрация C++ класса и вызова.
- test: тестовый проект.
- CMake. Поддерживает только компилятор MSVC.
Особенности
- Использование DirectX для ускорения 2D-графики, более эффективно, чем GDI.
- Поддержка Unicode для многоязычности.
- Предоставление Win32 API, поддержка создания lib и dll. Созданные dll могут быть вызваны другими языками.
- Гибкое расширение компонентов, обработка логики на уровне движка. Пользователю нужно только написать код рисования, не нужно беспокоиться о сложной обработке сообщений.
- В настоящее время поддерживаемые компоненты включают кнопки, переключатели, флажки, поля выбора, текстовые поля, поля форматированного текста, списки полей, отчёты, шаблоны, группы, панели инструментов, меню, древовидные структуры, ползунки, радиокнопки, поля выбора, вкладки, анимацию загрузки, вращающиеся изображения, страницы, изображения, сообщения, значки, кнопки списка, панели инструментов, строки состояния, шкалы цветов, палитры цветов, заголовки, календари, счётчики, CEF3 браузеры, доски для рисования мышью, медиаплееры, выпадающие меню, доски для аннотаций, которые могут быть расширены для создания новых компонентов.
- Поддерживается компоновка, компоновка может автоматически обновлять расположение компонентов при изменении размера окна. В настоящее время поддерживается абсолютная компоновка, относительная компоновка, линейная компоновка, потоковая компоновка. Пользователи могут расширять компоновку.
- GIF-анимация поддерживается автоматически, поддерживаются форматы изображений PNG, JPEG, BMP, GIF, DDS, ICON. Окна или компоненты могут использовать эти форматы в качестве фоновых изображений.
- 34 вида эффектов анимации поддерживаются, пользователи могут свободно писать эффекты анимации для окон или компонентов. Пользователи также могут расширять алгоритмы анимации.
- Текстовые поля поддерживают форматированный текст, поддерживают загрузку документов RTF.
- Поддерживаются модальные окна, перетаскивание, прозрачность, нестандартные окна, окна с формой изображения и т. д. Окна и компоненты поддерживают прозрачность от 0 до 255. Поддерживается размытие по Гауссу.
- Ограниченные области уведомлений поддерживаются.
Концепция рисования окон
- Графический интерфейс окна основан на окнах и механизмах сообщений. Рабочий стол также является окном. Элементы управления — это графические элементы, нарисованные на окне, с такими функциями, как сообщения мыши и клавиатуры, что позволяет реализовать различные функции элементов управления. Например, когда мышь зависает над кнопкой, сообщение о нажатии кнопки отправляется, когда кнопка нажата, а кнопка меняет своё состояние при нажатии, чтобы реализовать функцию кнопки. Окно включает в себя рисование элементов управления, которое делится на рисование GDI и рисование DirectX. Первый не вызывает рендеринг видеокарты и имеет низкую производительность. Второй использует ускорение видеокарты.
- Исходя из этого принципа, ExDuiR выбирает функции рисования на основе DirectX (DirectX11 и D2D) и реализует пользовательское рисование и получение сообщений Windows через подклассы окон.
Общий дизайн
- Для того чтобы его можно было вызывать из других языков, ExDuiR предоставляет интерфейс функций, который компилируется в dll для вызова другими языками.
- ExDuiR разработал собственную базовую систему классов, включая Array (для использования компонентами, требующими массивов), HandleTable (таблица компонентов для обслуживания компонентов), HashTable (используется для сохранения информации о событиях, свойствах, ресурсах, темах, шрифтах и макетах компонентов), Theme (класс темы для чтения файлов ресурсов темы), Resource (класс ресурсов для распаковки файлов тем), Easing (класс алгоритма замедления), ImageList (класс списка изображений для управления ресурсами изображений), Layout (определение отношений между позициями компонентов), MemPool (класс пула памяти для кэширования информации о хэше и содержимого сообщений при отправке), Thread (класс потока), DropTarget (класс перетаскивания).
- Базовые классы для рисования компонентов ExDuiR включают Brush (класс кисти), Canvas (класс холста), Font (класс шрифта), Image (класс изображения), Matrix (класс матрицы), Path (класс пути), Region (класс области), StokeStyle (класс стиля линии).
Инструкция по вызову
- Ex_Init инициализирует движок.
- Ex_WndCreate создаёт окно, затем вызывает Ex_DUIBindWindowEx для привязки скина к окну, затем использует Ex_DUISetLong для установки цвета фона окна.
- Ex_DUIShowWindow отображает окно. Затем следует Ex_WndMsgLoop для поддержания цикла сообщений (цикл останавливается, когда окно получает сообщение о закрытии).
- Ex_UnInit освобождает движок.
Описание расширения компонентов
Ex_ObjRegister регистрирует класс компонента, в сообщении обратного вызова WM_PAINT рисует компонент, а другие сообщения управляют состоянием компонента. При использовании создайте компонент с именем класса. Компоненту требуется количество атрибутов, указанное в Ex_ObjRegister cbObjextra, по умолчанию каждый размер составляет 8 байтов. Используйте индекс, начиная с 0 (отрицательные числа являются базовыми индексами встроенных компонентов, не используйте их). Используйте Ex_ObjSetLong для установки атрибутов и Ex_ObjGetLong для получения атрибутов.
- Можно расширить базовый компонент поверх Class_RotateImageBox_ex.cpp, обратный вызов по умолчанию возвращает Ex_ObjCallProc.
- Можно повторно настроить компонент обратного вызова для расширения компонента, см. Class_TitleBar_ex.cpp, обратный вызов по умолчанию возвращает Ex_ObjDefProc.
Рисование компонента начинается с вызова функции Ex_ObjBeginPaint, передающей структуру рисования, и завершается рисованием, не забудьте вызвать Ex_ObjEndPaint.
Список благодарностей (без рейтинга)
Сяохань, Идин, Sunshine, SupMe, Хэ Юн. 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:
demo drawing board:
demo propertygrid:
demo media player:
demo svg:
demo carousel:
demo rollmenu:
demo tray:
demo mask:
demo taggingboard:
demo effect:
demo pathandrgn:

Опубликовать ( 0 )