重构: 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:
1 parent
0467086e65
commit
199abb989c
3 files changed
+617
-366
No files matched your search
@@ -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]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user