1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/william_lzw-ExDUIR

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 13 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 29.11.2024 18:20 153ebd3

ExDUIR

Английский

简介

Windows平台轻量DirectUI框架。

Данный проект основан на ExDirectUI 4.1.18, открытой версии, которая была переписана.

Улучшения по сравнению с оригинальной версией

Пожалуйста, проверьте журнал обновлений.

Обратная связь и помощь

  • Общение в QQ группе: 214406227.
  • Отправка обратной связи: Gitee issues или GitHub issues.

Система запуска

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 (класс стиля линии).

Инструкция по вызову

  1. Ex_Init инициализирует движок.
  2. Ex_WndCreate создаёт окно, затем вызывает Ex_DUIBindWindowEx для привязки скина к окну, затем использует Ex_DUISetLong для установки цвета фона окна.
  3. Ex_DUIShowWindow отображает окно. Затем следует Ex_WndMsgLoop для поддержания цикла сообщений (цикл останавливается, когда окно получает сообщение о закрытии).
  4. 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:
image demo loading:
image demo matrix:
image demo menubutton:
image demo messagebox:
image demo navbutton:
image demo nchitest:
image demo progressbar:
image demo radio and checkbox:
image demo reportlistview:
image demo rotatebox:
image demo sliderbar:
image demo treeview:
image demo modal:
image demo titlebar: image demo datebox: image demo palette: image demo color picker: image demo calendar: image demo cefbrowser: image demo score button: image demo template listview: image demo drawing board: image demo propertygrid: image demo media player: image demo svg: image demo carousel: image demo rollmenu: image demo tray: image demo mask: image demo taggingboard: image demo effect: image demo pathandrgn: image

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

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/william_lzw-ExDUIR.git
git@api.gitlife.ru:oschina-mirror/william_lzw-ExDUIR.git
oschina-mirror
william_lzw-ExDUIR
william_lzw-ExDUIR
master