#include "stdafx.h" #include "EarThwormDef.h" #include "SMLOBJDlg.h" IMPLEMENT_DYNAMIC(CSMLOBJDlg, CDialog) CSMLOBJDlg::CSMLOBJDlg(CWnd* pParent /*=NULL*/) : CDialog(IDD_SML_DLG, pParent) , m_sCodeText(_T("")) , m_sName(_T("")) { } CSMLOBJDlg::~CSMLOBJDlg() { } void CSMLOBJDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_EDIT2, m_wndName); DDX_Control(pDX, IDC_EDIT1, m_wndCodes); DDX_Control(pDX, IDC_LIST1, m_wndListVal); DDX_Text(pDX, IDC_EDIT1, m_sCodeText); DDX_Text(pDX, IDC_EDIT2, m_sName); } BEGIN_MESSAGE_MAP(CSMLOBJDlg, CDialog) ON_BN_CLICKED(IDOK, &CSMLOBJDlg::OnBnClickedOk) END_MESSAGE_MAP() BOOL CSMLOBJDlg::OnInitDialog() { CDialog::OnInitDialog(); m_wndListVal.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_SINGLEROW); m_wndListVal.InsertColumn(0, _T("变量名"), LVCFMT_LEFT, 120); m_wndListVal.InsertColumn(1, _T("变量值"), LVCFMT_LEFT, 140); m_wndListVal.InsertColumn(3, _T("类型"), LVCFMT_LEFT,100); m_wndListVal.SetColumnItemData(1, NULL, ET_Edit); CString sLn; for (int i = 0;i < m_CodeLines.GetSize();i++) { sLn = m_CodeLines.GetAt(i); sLn += _T("\r\n"); m_sCodeText += sLn; } m_xData.GetAt(KEY_NAME, m_sName); AecDbObjXDataMap::It it = m_xData.Begin(); AecDbObjXDataMap::It end = m_xData.End(); CString sKey; AecXData xdata; memset(&xdata, 0, sizeof(AecXData)); int nItem = 0; TCHAR szData[MAX_PATH * 4]; for (; it != end; ) { if (!m_xData.GetNext(it, sKey, xdata)) break; switch (xdata.nVt) { case VT_I4: // 整型 { nItem = m_wndListVal.InsertItem(m_wndListVal.GetItemCount(), sKey); swprintf(szData, _T("%d"), (int)xdata.nVal); m_wndListVal.SetItemText(nItem, 1, szData); m_wndListVal.SetItemText(nItem, 2, _T("整数")); break; } case VT_R8: // 浮点 { nItem = m_wndListVal.InsertItem(m_wndListVal.GetItemCount(), sKey); swprintf(szData, _T("%.6f"), xdata.dVal[0]); m_wndListVal.SetItemText(nItem, 1, szData); m_wndListVal.SetItemText(nItem, 2, _T("浮点数")); break; } case VT_BSTR: // 字符串 { //太长...多余的截掉 if (xdata.npszLen > MAX_PATH * 4) { wcsncpy(szData, xdata.pszVal, MAX_PATH * 4 - 4); _tcscat(szData, _T("...")); } else { swprintf(szData, _T("%s"), xdata.pszVal); } nItem = m_wndListVal.InsertItem(m_wndListVal.GetItemCount(), sKey); m_wndListVal.SetItemText(nItem, 1, szData); m_wndListVal.SetItemText(nItem, 2, _T("字符串")); break; } default: break; } } UpdateData(FALSE); return TRUE; } void CSMLOBJDlg::AddCodeLine(CString &sLine) { m_CodeLines.Add(sLine); } void CSMLOBJDlg::AddCodeLines(CStringArray &arLines) { m_CodeLines.Append(arLines); } void CSMLOBJDlg::SetXDataMap(const AecDbObjXDataMap *pMap) { m_xData.CopyFrom(pMap); } void CSMLOBJDlg::OnBnClickedOk() { UpdateData(); CString sKey, sVal,sType; for (int i = 0;i < m_wndListVal.GetItemCount();i++) { sKey = m_wndListVal.GetItemText(i, 0); sVal = m_wndListVal.GetItemText(i, 1); sType = m_wndListVal.GetItemText(i, 2); if ( sType.CompareNoCase( _T("整数") ) == 0) { m_xData.SetAt(sKey, _ttoi(sVal)); } else if (sType.CompareNoCase(_T("浮点数") ) == 0) { m_xData.SetAt(sKey, _ttof(sVal)); } else if (sType.CompareNoCase(_T("字符串")) == 0) { m_xData.SetAt(sKey, sVal); } } m_xData.SetAt(KEY_NAME, m_sName); CDialog::OnOK(); }