This commit is contained in:
睿 安
2026-01-25 23:46:14 +08:00
parent 2a2a3d68d8
commit 37e7d278bd
727 changed files with 193377 additions and 7 deletions

189
demo/ResPackage/mainFrom.h Normal file
View File

@@ -0,0 +1,189 @@
#include "EzUI/Application.h"
#include "EzUI/VLayout.h"
#include "EzUI/TextBox.h"
#include "EzUI/Button.h"
#include "EzUI/Window.h"
#include "EzUI/Resource.h"
#include "EzUI/Task.h"
#include "EzUI/HLayout.h"
#include "EzUI/UIManager.h"
using namespace ezui;
class MainFrm :public Window {
Task* task = NULL;
UIManager ui;
//选项卡
TabLayout* tab;
//第一页的控件
//要打包的目录
TextBox* editPackDir;
//打包之后要输出的文件名
TextBox* editPackName;
//开始打包的按钮
Button* btnSatrtPackage;
//提示文本
Label* labelTips;
Label* labelTipsErr;
//第二页的控件
TextBox* editResFile;
Button* btnBrowserFile;
VListView* listFiles;
Button* btnUnPackage;
//资源指针
Resource* res = NULL;
public:
void Init();
MainFrm(const UIString& cmdLine);
void OnPackDirChange();
void OnClose(bool& close) override;
bool FileExists(const UIString& fileName);
void OnNotify(Control* sender, EventArgs& args)override;
void OnResFileChange(UIString& resFile);
virtual LRESULT WndProc(UINT msg, WPARAM wp, LPARAM lp);
virtual ~MainFrm();
};
inline bool FileExists(const UIString& filename) {
DWORD dwAttr = GetFileAttributesW(filename.unicode().c_str());
if (dwAttr == DWORD(-1)) {
return false;
}
if (dwAttr & FILE_ATTRIBUTE_ARCHIVE) {
return true;
}
return false;
}
inline bool PathExist(const UIString& dir) {
DWORD dwAttr = GetFileAttributesW(dir.unicode().c_str());
if (dwAttr == DWORD(-1)) {
return false;
}
if (dwAttr & FILE_ATTRIBUTE_DIRECTORY)
{
return true;
}
return false;
}
inline bool CreatePath(const UIString& path) {
::CreateDirectoryW(path.unicode().c_str(), NULL);
if (PathExist(path)) {
return true;
}
//创建多级目录
if (path.find(":") != size_t(-1)) {
UIString dir = path + "/";
dir = dir.replace("\\", "/");
dir = dir.replace("//", "/");
auto arr = dir.split("/");
UIString root;
if (arr.size() > 0) {
root += arr[0] + "/";
for (size_t i = 1; i < arr.size(); i++)
{
if (arr[i].empty()) {
continue;
}
root += arr[i] + "/";
if (!PathExist(root)) {
::CreateDirectoryW(root.unicode().c_str(), NULL);
}
}
}
}
return PathExist(path);
}
inline UIString ShowFileDialog(HWND ownerWnd, const UIString& defaultPath = "", const UIString& title = "") {
OPENFILENAMEW ofn; // 打开文件对话框结构体
WCHAR szFile[512]{ 0 }; // 选择的文件名
// 初始化OPENFILENAME结构体
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.lpstrFile = szFile;
ofn.lpstrFile[0] = '\0';
ofn.hwndOwner = ownerWnd;
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = L"All Files\0*.*\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
// 显示文件对话框
if (GetOpenFileNameW(&ofn) == TRUE) {
return szFile;
}
return szFile;
}
#include <ShlObj.h>
inline UIString ShowFolderDialog(HWND ownerWnd, const UIString& defaultPath = "", const UIString& title = "") {
WCHAR selectedPath[MAX_PATH]{ 0 };
BROWSEINFOW browseInfo{ 0 };
browseInfo.hwndOwner = ownerWnd;
browseInfo.pszDisplayName = selectedPath;
auto wTitle = title.unicode();
browseInfo.lpszTitle = wTitle.c_str();
//设置根目录
LPITEMIDLIST pidlRoot;
::SHParseDisplayName(defaultPath.unicode().c_str(), NULL, &pidlRoot, 0, NULL);
browseInfo.pidlRoot = pidlRoot;
browseInfo.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;
LPITEMIDLIST itemIdList = SHBrowseForFolderW(&browseInfo);
if (itemIdList != nullptr) {
SHGetPathFromIDListW(itemIdList, selectedPath);//设置路径
CoTaskMemFree(itemIdList);//清理
return selectedPath;
}
return selectedPath;
}
inline std::string GetFileSize(__int64 _KEY_FILE_SIZE) {
std::string ext;
std::string disp_size;
long double KEY_FILE_SIZE = _KEY_FILE_SIZE;
if (KEY_FILE_SIZE > 1024) {
KEY_FILE_SIZE = KEY_FILE_SIZE / 1024.0f; // kb
ext = "KB";
if (KEY_FILE_SIZE > 1024) {
KEY_FILE_SIZE = KEY_FILE_SIZE / 1024.0f; // mb
ext = "MB";
if (KEY_FILE_SIZE > 1024) {
KEY_FILE_SIZE = KEY_FILE_SIZE / 1024.0f; // gb
ext = "GB";
}
}
}
else {
ext = "BT";
}
disp_size = ui_text::ToString(KEY_FILE_SIZE, 2) + " " + ext;
return disp_size;
}
class FileItem :public HBox {
Label name;
Label size;
public:
FileItem(const UIString& fileName, size_t fileSize) {
this->SetFixedHeight(25);
this->SetDockStyle(DockStyle::Horizontal);
name.TextAlign = TextAlign::MiddleLeft;
name.SetText(" " + fileName);
name.SetElidedText("...");
this->Add(&name);
size.SetFixedWidth(100);
size.SetText(GetFileSize(fileSize));
this->Add(&size);
name.SetHitTestVisible(false);
this->HoverStyle.BackColor = Color(100, 100, 100, 50);
this->Style.FontSize = 13;
this->ActiveStyle.FontSize = 14;
}
};