重构: AecDbObjXDataMap 解耦 UI,并统一 SetAt/数组实现

- AecXData 的 ctor/Free/CopyFrom 由头部 inline 移入 .cpp,结构体加
  AECDLLIMPEXP 导出,修复其它模块构造 AecXData 时的 LNK2019。
- 抽出私有 SetXData(pszKey, xdata) 助手,替换各 SetAt 中重复的
  find/Free+覆盖/insert 逻辑,并接管 xdata 所有权。
- 数组二进制块统一为 [kArrayMagic][元素类型][元素个数][数据...],元素类型
  复用 AecXData::EType;新增元素类型无需再加魔数或类型标签。
- 矩阵/数组魔数集中到 .cpp 顶部常量,便于维护。
- List(CListCtrl*, int) 改为 List(std::vector<CString>&):去掉 MFC 控件与
  nImage 依赖,每个元素输出 key/value 两项;CCKSXDlg::ListXDataMap 相应改为
  构造 vector 后填充两列列表。
This commit is contained in:
company-desktop-computer committed 2026-10-13 15:28:19 +08:00
1 parent 0467086e65
commit 199abb989c
3 files changed
+617 -366

No files matched your search

+13 -3
View File
@@ -1,6 +1,7 @@
#include "stdafx.h"
#include "CCKSXDlg.h"
#include "AecDbObjXDataMap.h"
#include <vector>
IMPLEMENT_DYNAMIC(CCKSXDlg, CDialog)
@@ -77,10 +78,19 @@ BOOL CCKSXDlg::OnInitDialog()
void CCKSXDlg::ListXDataMap(AecDbObjXDataMap *pXDataMap)
{
if (pXDataMap != NULL)
if (pXDataMap == NULL)
return;
m_wndListXData.DeleteAllItems();
std::vector<CString> vecItems;
pXDataMap->List(vecItems);
// List() 每个元素输出两项:先 key(名称列),后 value(数据列)。
for (size_t i = 0; i + 1 < vecItems.size(); i += 2)
{
m_wndListXData.DeleteAllItems();
pXDataMap->List(&m_wndListXData, 0);
int nItem = m_wndListXData.InsertItem(m_wndListXData.GetItemCount(), vecItems[i]);
m_wndListXData.SetItemText(nItem, 1, vecItems[i + 1]);
}
}