DuiLib_Faw
Описание
Этот проект является версией DuiLib, которая поддерживается одним человеком. Проект был переписан с использованием Modern C++. Требуется поддержка C++20 или выше, хотя часть кода ещё не полностью использует возможности C++20.
Общеизвестная основная ветвь DuiLib находится в состоянии редкого обновления. Несколько лет назад радикальные обновления DuiLib Ultimate и DuiLib Redrain также стали более консервативными, что привело к снижению скорости обновлений. Однако эта превосходная библиотека постепенно перестаёт удовлетворять современным требованиям.
Цель этого репозитория — внести более радикальные улучшения в DuiLib, чтобы он лучше соответствовал текущим потребностям разработки.
Проект обновляется двумя способами: во-первых, путём радикального обновления самого проекта; во-вторых, путём синхронизации обновлений из основной ветки репозитория при необходимости.
Пример использования: Easy Master Network Toolbox.
В настоящее время проект поддерживает только компиляцию в среде VS2017. Если вы используете clang, gcc или другие компиляторы, вам необходимо самостоятельно создать файл проекта.
Использование
Примечание: поскольку 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 };
Обратите внимание:
Предположим, что узел 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 )