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

OSCHINA-MIRROR/fawdlstty-DuiLib_Faw

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

DuiLib_Faw

Описание

Этот проект является версией DuiLib, которая поддерживается одним человеком. Проект был переписан с использованием Modern C++. Требуется поддержка C++20 или выше, хотя часть кода ещё не полностью использует возможности C++20.

Общеизвестная основная ветвь DuiLib находится в состоянии редкого обновления. Несколько лет назад радикальные обновления DuiLib Ultimate и DuiLib Redrain также стали более консервативными, что привело к снижению скорости обновлений. Однако эта превосходная библиотека постепенно перестаёт удовлетворять современным требованиям.

Цель этого репозитория — внести более радикальные улучшения в DuiLib, чтобы он лучше соответствовал текущим потребностям разработки.

Проект обновляется двумя способами: во-первых, путём радикального обновления самого проекта; во-вторых, путём синхронизации обновлений из основной ветки репозитория при необходимости.

Пример использования: Easy Master Network Toolbox.

В настоящее время проект поддерживает только компиляцию в среде VS2017. Если вы используете clang, gcc или другие компиляторы, вам необходимо самостоятельно создать файл проекта.

Использование

Первый шаг: подключение dll

Динамическое подключение (не рекомендуется)

Примечание: поскольку CDuiString заменён на std::string, компиляция с динамическим подключением может привести к серьёзным предупреждениям компилятора. В настоящее время я пытаюсь решить эту проблему.

Для программ, использующих динамическое подключение, необходимо сохранить файлы DuiLib*.dll в каталоге программы, иначе программа не сможет работать.

Использование: в основной программе добавьте следующий код:

#if (defined _UNICODE) && (defined _DEBUG) && (defined _WIN64)
#    pragma comment (lib, "../lib/DuiLib_64d.lib")
#elif (defined _UNICODE) && (defined _DEBUG) && (!defined _WIN64)
#    pragma comment (lib, "../lib/DuiLib_d.lib")
#elif (defined _UNICODE) && (!defined _DEBUG) && (defined _WIN64)
#    pragma comment (lib, "../lib/DuiLib_64.lib")
#elif (defined _UNICODE) && (!defined _DEBUG) && (!defined _WIN64)
#    pragma comment (lib, "../lib/DuiLib.lib")
#elif (!defined _UNICODE) && (defined _DEBUG) && (defined _WIN64)
#    pragma comment (lib, "../lib/DuiLibA_64d.lib")
#elif (!defined _UNICODE) && (defined _DEBUG) && (!defined _WIN64)
#    pragma comment (lib, "../lib/DuiLibA_d.lib")
#elif (!defined _UNICODE) && (!defined _DEBUG) && (defined _WIN64)
#    pragma comment (lib, "../lib/DuiLibA_64.lib")
#elif (!defined _UNICODE) && (!defined _DEBUG) && (!defined _WIN64)
#    pragma comment (lib, "../lib/DuiLibA.lib")
#endif
Статическое подключение

Статическое подключение имеет множество преимуществ, таких как меньшее количество зависимостей, меньший размер программы и т. д. Для экстремальных целей по уменьшению размера программы можно использовать этот метод подключения, использовать VC_LTL для оптимизации ссылок на проекты и уменьшать размер программы, а затем использовать upx для сжатия программы.

Применение: в основной программе добавить следующий код:

#if (defined _UNICODE) && (defined _DEBUG) && (defined _WIN64)
#    pragma comment (lib, "../lib/DuiLib_64sd.lib")
#elif (defined _UNICODE) && (defined _DEBUG) && (!defined _WIN64)
#    pragma comment (lib, "../lib/DuiLib_sd.lib")
#elif (defined _UNICODE) && (!defined _DEBUG) && (defined _WIN64)
#    pragma comment (lib, "../lib/DuiLib_64s.lib")
#elif (defined _UNICODE) && (!defined _DEBUG) && (!defined _WIN64)
#    pragma comment (lib, "../lib/DuiLib_s.lib")
#elif (!defined _UNICODE) && (defined _DEBUG) && (defined _WIN64)
#    pragma comment (lib, "../lib/DuiLibA_64sd.lib")
#elif (!defined _UNICODE) && (defined _DEBUG) && (!defined _WIN64)
#    pragma comment (lib, "../lib/DuiLibA_sd.lib")
#elif (!defined _UNICODE) && (!defined _DEBUG) && (defined _WIN64)
#    pragma comment (lib, "../lib/DuiLibA_64s.lib")
#elif (!defined _UNICODE) && (!defined _DEBUG) && (!defined _WIN64)
#    pragma comment (lib, "../lib/DuiLibA_s.lib")
#endif

Добавьте определение препроцессора UILIB_STATIC, если это необходимо, и установите параметры компиляции на /MT или /MTd соответственно.

Второй шаг: добавление привязки переменных

Необходимо заменить все следующие коды:

// InitWindow внутри
CEditUI *ctrl = dynamic_cast<CEditUI*> (parent->find_control (_T ("ctrl_name")));

на:

// В любом месте
BindEditUI ctrl { _T ("ctrl_name") };

// Рекомендуется передавать m_pm для многооконного режима, чтобы избежать проблем с поиском элементов управления
BindEditUI ctrl { _T ("ctrl_name"), &m_pm };

Обратите внимание:

  1. Место создания связанного объекта не ограничено, его можно связать во время выполнения программы или после завершения InitWindow.
  2. Связанные объекты нельзя использовать до создания окна и PaintManager. Они могут использоваться только после того, как оба будут созданы.
  3. Не устанавливайте имя для PaintManager, если оно необходимо, то необходимо синхронизировать изменения в коде Bind/BindCtrls.hpp.
  4. Объекты BindXxxxxUI нельзя создавать с помощью new, их следует использовать напрямую, используя -> для доступа к свойствам или методам CXxxxxUI.

Третий шаг: пользовательская привязка элементов управления

Предположим, что узел XML — <UserCtrl name="ctrl_name" />, тогда имя класса должно быть единообразным, например CUserCtrlUI. Затем добавьте следующий код в заголовочный файл:

#ifdef DEF_BINDCTRL
DEF_BINDCTRL (UserCtrl);
#endif //DEF_BINDCTRL

Готово! Теперь вы можете использовать следующий код для привязки пользовательских элементов управления:

BindUserCtrlUI ctrl { _T ("ctrl_name") };
``` Вертикальный макет автоматически рассчитывает высоту, горизонтальный макет автоматически рассчитывает ширину.

## Требует изучения или добавления:

1. Реализовать эффект виртуального списка.
2. Реализовать эффект тени текста.
3. Изображения не имеют autocalcwidth и autocalcheight.
4. Контейнер не поддерживает расчёт размера на основе размера дочерних элементов.
5. Рассмотреть добавление функций Ribbon, Docker, MVC.

## Лицензия: MIT + исходная лицензия.

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

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

Введение

Проект DuiLib, современная версия, использует C++17, поддерживает привязку элементов управления. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/fawdlstty-DuiLib_Faw.git
git@api.gitlife.ru:oschina-mirror/fawdlstty-DuiLib_Faw.git
oschina-mirror
fawdlstty-DuiLib_Faw
fawdlstty-DuiLib_Faw
master