Files
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

154 lines
3.4 KiB
C++

#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();
}