diff --git a/demo/Adminstor/Adminstor/mainForm.cpp b/demo/Adminstor/Adminstor/mainForm.cpp index 1ea9cf5..31cefe4 100644 --- a/demo/Adminstor/Adminstor/mainForm.cpp +++ b/demo/Adminstor/Adminstor/mainForm.cpp @@ -118,30 +118,34 @@ void mainForm::OnClose(bool& close) Application::Exit(); } -mainForm::mainForm() :LayeredWindow(1400, 750) +mainForm::mainForm() :LayeredWindow(1500, 750) { SetResizable(true); // 启用窗口大小调整 SetMiniSize(Size(600, 450)); // 设置最小尺寸 umg.LoadXml("res/mainForm.htm");//加载xml里面的控件与样式 umg.SetupUI(this); + // 如果是debug模式则创建控制台窗口用于输出调试信息 +#ifdef _DEBUG AllocConsole(); FILE* fp = nullptr; freopen_s(&fp, "CONOUT$", "w", stdout); freopen_s(&fp, "CONOUT$", "w", stderr); - + std::cout << "调试模式控制台已启动!" << std::endl; +#endif + // 初始化设置表格各项属性 TableView* tableView = (TableView*)FindControl("tableViewAdmin"); //获取表格控件 if (tableView) { tableView->SelectedRowBackColor = Color(200, 230, 255); // 设置选中行背景色 //tableView->SetColumnType(5, ezui::CellType::CheckBox); - tableView->SetColumnType(2, ezui::CellType::ComboBox); - tableView->SetColumnComboItems(2, { L"默认", L"禁止" , L"验机" }); - tableView->SetDefaultTextAlign(Align::MiddleCenter); + tableView->SetColumnType(2, ezui::CellType::ComboBox); //设置第3列为下拉列表类型 + tableView->SetColumnComboItems(2, { L"默认", L"禁止" , L"验机" }); //设置第3列下拉列表内容 + tableView->SetDefaultTextAlign(Align::MiddleCenter); //设置默认对齐方式 //设置列宽 - std::vector withs = {60, 120, 50, 90, 85, 85, 100, 70, 70, 80, 80, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90}; + std::vector withs = {60, 130, 55, 95, 85, 85, 105, 70, 75, 80, 80, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95 }; for(int i = 0; i < withs.size(); i++) tableView->SetColumnWidth(i, withs[i]); diff --git a/demo/Adminstor/ThirdParty/EzUI/include/EzUI/ComboBox.h b/demo/Adminstor/ThirdParty/EzUI/include/EzUI/ComboBox.h index d2ecc02..6baa4b8 100644 --- a/demo/Adminstor/ThirdParty/EzUI/include/EzUI/ComboBox.h +++ b/demo/Adminstor/ThirdParty/EzUI/include/EzUI/ComboBox.h @@ -32,6 +32,7 @@ namespace ezui { VListView m_list; int m_index = -1; + int m_pendingIndex = -1; // 延迟设置的索引(用于XML属性解析) void Init(); protected: virtual void OnLayout()override; @@ -47,5 +48,7 @@ namespace ezui { //添加一个item并返回新item的下标 int AddItem(const UIString& text); void RemoveItem(int index); + //设置属性 + virtual void SetAttribute(const UIString& key, const UIString& value)override; }; }; diff --git a/demo/Adminstor/ThirdParty/EzUI/include/EzUI/TableView.h b/demo/Adminstor/ThirdParty/EzUI/include/EzUI/TableView.h index 791af35..c993af3 100644 --- a/demo/Adminstor/ThirdParty/EzUI/include/EzUI/TableView.h +++ b/demo/Adminstor/ThirdParty/EzUI/include/EzUI/TableView.h @@ -255,14 +255,29 @@ namespace ezui { // 选中行背景色(当第一列为CheckBox且被选中时使用,或者单击选中行时使用) Color SelectedRowBackColor = Color(0xFFADD8E6); // 浅蓝色 + /* + table->CellValueChanged = [](int row, int col, const UIString& value) { + // 处理内容变化 + }; + */ // 单元格内容变化回调(内容变化时立即触发) // 参数: row, col, newValue std::function CellValueChanged = nullptr; - + + /* + table->CellEditFinished = [](int row, int col, const UIString& oldValue, const UIString& newValue) { + // 处理内容变化 + }; + */ // 单元格编辑完成回调(编辑结束时触发,比如TextBox失去焦点或按Enter时) // 参数: row, col, oldValue, newValue std::function CellEditFinished = nullptr; + /* + tableView->RightClick= [tableView](int row, int col) { + // 处理内容变化 + }; + */ // 鼠标右键单击回调 // 参数: row, col (row=-1 表示点击在表头,col=-1 表示点击在第一列) std::function RightClick = nullptr; diff --git a/demo/Adminstor/ThirdParty/EzUI/lib/EzUI_Debug_Win32.lib b/demo/Adminstor/ThirdParty/EzUI/lib/EzUI_Debug_Win32.lib index 620ce05..24b2718 100644 Binary files a/demo/Adminstor/ThirdParty/EzUI/lib/EzUI_Debug_Win32.lib and b/demo/Adminstor/ThirdParty/EzUI/lib/EzUI_Debug_Win32.lib differ diff --git a/demo/Adminstor/ThirdParty/EzUI/lib/EzUI_Debug_Win32.pdb b/demo/Adminstor/ThirdParty/EzUI/lib/EzUI_Debug_Win32.pdb index 6062181..155669f 100644 Binary files a/demo/Adminstor/ThirdParty/EzUI/lib/EzUI_Debug_Win32.pdb and b/demo/Adminstor/ThirdParty/EzUI/lib/EzUI_Debug_Win32.pdb differ diff --git a/demo/Adminstor/ThirdParty/EzUI/lib/EzUI_Debug_x64.lib b/demo/Adminstor/ThirdParty/EzUI/lib/EzUI_Debug_x64.lib index 4f060f0..ff428e5 100644 Binary files a/demo/Adminstor/ThirdParty/EzUI/lib/EzUI_Debug_x64.lib and b/demo/Adminstor/ThirdParty/EzUI/lib/EzUI_Debug_x64.lib differ diff --git a/demo/Adminstor/ThirdParty/EzUI/lib/EzUI_Debug_x64.pdb b/demo/Adminstor/ThirdParty/EzUI/lib/EzUI_Debug_x64.pdb index 4d67a9b..bdd0061 100644 Binary files a/demo/Adminstor/ThirdParty/EzUI/lib/EzUI_Debug_x64.pdb and b/demo/Adminstor/ThirdParty/EzUI/lib/EzUI_Debug_x64.pdb differ diff --git a/demo/Adminstor/ThirdParty/EzUI/lib/EzUI_Release_Win32.lib b/demo/Adminstor/ThirdParty/EzUI/lib/EzUI_Release_Win32.lib index 0ba0bf6..90d1a7a 100644 Binary files a/demo/Adminstor/ThirdParty/EzUI/lib/EzUI_Release_Win32.lib and b/demo/Adminstor/ThirdParty/EzUI/lib/EzUI_Release_Win32.lib differ diff --git a/demo/Adminstor/ThirdParty/EzUI/lib/EzUI_Release_x64.lib b/demo/Adminstor/ThirdParty/EzUI/lib/EzUI_Release_x64.lib index e4f8671..a20be2e 100644 Binary files a/demo/Adminstor/ThirdParty/EzUI/lib/EzUI_Release_x64.lib and b/demo/Adminstor/ThirdParty/EzUI/lib/EzUI_Release_x64.lib differ diff --git a/include/EzUI/ComboBox.h b/include/EzUI/ComboBox.h index d2ecc02..6baa4b8 100644 --- a/include/EzUI/ComboBox.h +++ b/include/EzUI/ComboBox.h @@ -32,6 +32,7 @@ namespace ezui { VListView m_list; int m_index = -1; + int m_pendingIndex = -1; // 延迟设置的索引(用于XML属性解析) void Init(); protected: virtual void OnLayout()override; @@ -47,5 +48,7 @@ namespace ezui { //添加一个item并返回新item的下标 int AddItem(const UIString& text); void RemoveItem(int index); + //设置属性 + virtual void SetAttribute(const UIString& key, const UIString& value)override; }; }; diff --git a/include/EzUI/TableView.h b/include/EzUI/TableView.h index 791af35..c993af3 100644 --- a/include/EzUI/TableView.h +++ b/include/EzUI/TableView.h @@ -255,14 +255,29 @@ namespace ezui { // 选中行背景色(当第一列为CheckBox且被选中时使用,或者单击选中行时使用) Color SelectedRowBackColor = Color(0xFFADD8E6); // 浅蓝色 + /* + table->CellValueChanged = [](int row, int col, const UIString& value) { + // 处理内容变化 + }; + */ // 单元格内容变化回调(内容变化时立即触发) // 参数: row, col, newValue std::function CellValueChanged = nullptr; - + + /* + table->CellEditFinished = [](int row, int col, const UIString& oldValue, const UIString& newValue) { + // 处理内容变化 + }; + */ // 单元格编辑完成回调(编辑结束时触发,比如TextBox失去焦点或按Enter时) // 参数: row, col, oldValue, newValue std::function CellEditFinished = nullptr; + /* + tableView->RightClick= [tableView](int row, int col) { + // 处理内容变化 + }; + */ // 鼠标右键单击回调 // 参数: row, col (row=-1 表示点击在表头,col=-1 表示点击在第一列) std::function RightClick = nullptr; diff --git a/lib/EzUI_Debug_Win32.lib b/lib/EzUI_Debug_Win32.lib index 620ce05..24b2718 100644 Binary files a/lib/EzUI_Debug_Win32.lib and b/lib/EzUI_Debug_Win32.lib differ diff --git a/lib/EzUI_Debug_Win32.pdb b/lib/EzUI_Debug_Win32.pdb index 6062181..155669f 100644 Binary files a/lib/EzUI_Debug_Win32.pdb and b/lib/EzUI_Debug_Win32.pdb differ diff --git a/lib/EzUI_Debug_x64.lib b/lib/EzUI_Debug_x64.lib index 4f060f0..ff428e5 100644 Binary files a/lib/EzUI_Debug_x64.lib and b/lib/EzUI_Debug_x64.lib differ diff --git a/lib/EzUI_Debug_x64.pdb b/lib/EzUI_Debug_x64.pdb index 4d67a9b..bdd0061 100644 Binary files a/lib/EzUI_Debug_x64.pdb and b/lib/EzUI_Debug_x64.pdb differ diff --git a/lib/EzUI_Release_Win32.lib b/lib/EzUI_Release_Win32.lib index 0ba0bf6..90d1a7a 100644 Binary files a/lib/EzUI_Release_Win32.lib and b/lib/EzUI_Release_Win32.lib differ diff --git a/lib/EzUI_Release_x64.lib b/lib/EzUI_Release_x64.lib index e4f8671..a20be2e 100644 Binary files a/lib/EzUI_Release_x64.lib and b/lib/EzUI_Release_x64.lib differ diff --git a/sources/ComboBox.cpp b/sources/ComboBox.cpp index 925f910..4e6aa59 100644 --- a/sources/ComboBox.cpp +++ b/sources/ComboBox.cpp @@ -111,13 +111,85 @@ namespace ezui { } }; - return m_list.GetControls().size() - 1; + int newIndex = m_list.GetControls().size() - 1; + // 检查是否有待设置的索引 + if (m_pendingIndex >= 0 && m_pendingIndex == newIndex) { + SetCheck(m_pendingIndex); + m_pendingIndex = -1; // 清除待设置标志 + } + return newIndex; } void ComboBox::RemoveItem(int index) { Control* lb = m_list.GetControl(index); m_list.Remove(lb, true); } + void ComboBox::SetAttribute(const UIString& key, const UIString& value) + { + do + { + if (key == "item") { + // 添加下拉选项,支持多个选项用逗号分隔 + if (value.find(',') != UIString::npos) { + // 解析多个选项 + size_t start = 0; + size_t end = value.find(','); + while (end != UIString::npos) { + UIString item = value.substr(start, end - start); + // 去除首尾空格 + while (!item.empty() && (item[0] == ' ' || item[0] == '\t')) { + item = item.substr(1); + } + while (!item.empty() && (item[item.length() - 1] == ' ' || item[item.length() - 1] == '\t')) { + item = item.substr(0, item.length() - 1); + } + if (!item.empty()) { + AddItem(item); + } + start = end + 1; + end = value.find(',', start); + } + // 处理最后一个选项 + UIString item = value.substr(start); + while (!item.empty() && (item[0] == ' ' || item[0] == '\t')) { + item = item.substr(1); + } + while (!item.empty() && (item[item.length() - 1] == ' ' || item[item.length() - 1] == '\t')) { + item = item.substr(0, item.length() - 1); + } + if (!item.empty()) { + AddItem(item); + } + } + else { + // 单个选项 + AddItem(value); + } + break; + } + if (key == "checked" || key == "selected" || key == "index") { + // 设置选中的下标 + int index = std::atoi(value.c_str()); + if (!SetCheck(index)) { + // 如果设置失败(可能是因为还没有添加item),保存索引稍后设置 + m_pendingIndex = index; + } + break; + } + if (key == "readonly") { + // 设置文本框只读状态 + if (value == "true") { + m_textBox.SetReadOnly(true); + break; + } + if (value == "false") { + m_textBox.SetReadOnly(false); + break; + } + } + } while (false); + __super::SetAttribute(key, value); + } void ComboBox::OnLayout() { this->m_UpDown.SetFixedSize(Size(Height(), Height())); __super::OnLayout(); diff --git a/sources/TextBox.cpp b/sources/TextBox.cpp index ff098bd..d708d40 100644 --- a/sources/TextBox.cpp +++ b/sources/TextBox.cpp @@ -757,8 +757,8 @@ namespace ezui { } if (key == "multiline") { if (value == "true") { - // 兼容旧版:multiline=true 表示自动换行+手动换行 - this->m_autoWrap = true; + // 兼容旧版:multiline=true 表示不自动换行+手动换行 + this->m_autoWrap = false; this->m_allowManualLineBreak = true; break; }