758 lines
21 KiB
C++
758 lines
21 KiB
C++
// DialCustomSptInput.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "geomative.h"
|
|
#include "DialCustomSptInput.h"
|
|
#include "CustomSptQueryDial.h"
|
|
#include "excel.h"
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
using namespace excel9;
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CDialCustomSptInput dialog
|
|
extern HHOOK hHook;
|
|
extern LRESULT __stdcall CBTHookProc(long nCode, WPARAM wParam, LPARAM lParam);
|
|
extern bool bIsPostiveInteger(CString strTxt);
|
|
extern bool bIsFloat(CString strTxt);
|
|
extern int g_iUILanguage;
|
|
//extern CString CovertVarToCString(const VARIANT& vtVal);
|
|
CDialCustomSptInput::CDialCustomSptInput(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CDialCustomSptInput::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CDialCustomSptInput)
|
|
m_strA = _T("");
|
|
m_strB = _T("");
|
|
m_strStacking = _T("1");
|
|
m_strK = _T("");
|
|
m_strLayer = _T("");
|
|
m_strM = _T("");
|
|
m_strN = _T("");
|
|
//}}AFX_DATA_INIT
|
|
m_iA = 0;
|
|
m_iB = 0;
|
|
m_iM = 0;
|
|
m_iN = 0;
|
|
m_iLayer = 0;
|
|
m_iIteration = 1;
|
|
m_fK = 0;
|
|
m_iTsn = 0;
|
|
// pComApp = NULL;
|
|
}
|
|
|
|
|
|
void CDialCustomSptInput::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CDialCustomSptInput)
|
|
DDX_Control(pDX, IDC_LIST_CUSTOM_SPT, m_listCustomSpt);
|
|
DDX_Text(pDX, IDC_EDIT_CUSTOMSPT_A, m_strA);
|
|
DDX_Text(pDX, IDC_EDIT_CUSTOMSPT_B, m_strB);
|
|
DDX_Text(pDX, IDC_EDIT_CUSTOMSPT_ITERATION, m_strStacking);
|
|
DDX_Text(pDX, IDC_EDIT_CUSTOMSPT_K, m_strK);
|
|
DDX_Text(pDX, IDC_EDIT_CUSTOMSPT_LAYER, m_strLayer);
|
|
DDX_Text(pDX, IDC_EDIT_CUSTOMSPT_M, m_strM);
|
|
DDX_Text(pDX, IDC_EDIT_CUSTOMSPT_N, m_strN);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CDialCustomSptInput, CDialog)
|
|
//{{AFX_MSG_MAP(CDialCustomSptInput)
|
|
ON_BN_CLICKED(IDC_BUTTON_ADD_LIST, OnButtonAddList)
|
|
ON_BN_CLICKED(IDC_BUTTON_DEL_LIST, OnButtonDelList)
|
|
ON_BN_CLICKED(IDC_BUTTON_MODIFY_LIST, OnButtonModifyList)
|
|
ON_NOTIFY(NM_CLICK, IDC_LIST_CUSTOM_SPT, OnClickListCustomSpt)
|
|
ON_BN_CLICKED(IDC_RADIO_HAND_INPUT, OnRadioHandInput)
|
|
ON_BN_CLICKED(IDC_RADIO_AUTO_CALC, OnRadioAutoCalc)
|
|
ON_BN_CLICKED(IDC_BUTTON_IMPORT, OnButtonImport)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CDialCustomSptInput message handlers
|
|
|
|
void CDialCustomSptInput::OnButtonAddList()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
if (!CheckInputIsValid())
|
|
{
|
|
return;
|
|
}
|
|
if (0 == m_iA || 0 == m_iB || 0 == m_iM || 0 == m_iN)
|
|
{
|
|
if (LANG_ZHCN == g_iUILanguage)
|
|
AfxMessageBox(_T("A,B,M,N的值不能为零!"));
|
|
else
|
|
MessageBoxEx(NULL, _T("The value of A,B,M,N cannot be zero!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
|
return;
|
|
}
|
|
if (m_iLayer < 1)
|
|
{
|
|
if (LANG_ZHCN == g_iUILanguage)
|
|
AfxMessageBox(_T("层数值错误!"));
|
|
else
|
|
MessageBoxEx(NULL, _T("Layer's value error!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
|
return;
|
|
}
|
|
if (!CalculateK())
|
|
{
|
|
return;
|
|
}
|
|
m_iTsn++;
|
|
|
|
CString szLabel = _T("");
|
|
int iRecIndex = m_listCustomSpt.GetItemCount();
|
|
|
|
m_listCustomSpt.InsertItem(iRecIndex,_T(""));
|
|
|
|
szLabel.Empty();
|
|
szLabel.Format(_T("%d"), m_iTsn);
|
|
m_listCustomSpt.SetItemText(iRecIndex, 0, szLabel);
|
|
|
|
szLabel.Empty();
|
|
szLabel.Format(_T("%d"), m_iA);
|
|
m_listCustomSpt.SetItemText(iRecIndex, 1, szLabel);
|
|
|
|
szLabel.Empty();
|
|
szLabel.Format(_T("%d"), m_iB);
|
|
m_listCustomSpt.SetItemText(iRecIndex, 2, szLabel);
|
|
|
|
szLabel.Empty();
|
|
szLabel.Format(_T("%d"), m_iM);
|
|
m_listCustomSpt.SetItemText(iRecIndex, 3, szLabel);
|
|
|
|
szLabel.Empty();
|
|
szLabel.Format(_T("%d"), m_iN);
|
|
m_listCustomSpt.SetItemText(iRecIndex, 4, szLabel);
|
|
|
|
szLabel.Empty();
|
|
szLabel.Format(_T("%f"), m_fK);
|
|
m_listCustomSpt.SetItemText(iRecIndex, 5, szLabel);
|
|
|
|
szLabel.Empty();
|
|
szLabel.Format(_T("%d"), m_iIteration);
|
|
m_listCustomSpt.SetItemText(iRecIndex, 6, szLabel);
|
|
|
|
szLabel.Empty();
|
|
szLabel.Format(_T("%d"), m_iLayer);
|
|
m_listCustomSpt.SetItemText(iRecIndex, 7, szLabel);
|
|
|
|
}
|
|
|
|
void CDialCustomSptInput::OnButtonDelList()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
int iIndex = 0;
|
|
POSITION pos = m_listCustomSpt.GetFirstSelectedItemPosition();
|
|
if (pos == NULL)
|
|
{
|
|
if (LANG_ZHCN == g_iUILanguage)
|
|
AfxMessageBox(_T("请先选择需要删除的数据!"));
|
|
else
|
|
MessageBoxEx(NULL, _T("Please chose the data which you want to delete!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
|
return ;
|
|
}
|
|
|
|
while (pos)
|
|
{
|
|
iIndex = m_listCustomSpt.GetNextSelectedItem(pos);
|
|
m_listCustomSpt.DeleteItem(iIndex);
|
|
pos = m_listCustomSpt.GetFirstSelectedItemPosition();
|
|
}
|
|
}
|
|
|
|
void CDialCustomSptInput::OnButtonModifyList()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
|
|
int nCnt = 0, nItem = 0;
|
|
POSITION pos = m_listCustomSpt.GetFirstSelectedItemPosition();
|
|
if (NULL != pos)
|
|
{
|
|
while (pos)
|
|
{
|
|
nCnt++;
|
|
nItem = m_listCustomSpt.GetNextSelectedItem(pos);
|
|
}
|
|
}
|
|
if (0 == nCnt)
|
|
{
|
|
if (LANG_ZHCN == g_iUILanguage)
|
|
AfxMessageBox(_T("请先选择数据!"));
|
|
else
|
|
MessageBoxEx(NULL, _T("Please chose data firstly!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
|
return;
|
|
}
|
|
if (1 != nCnt)
|
|
{
|
|
if (LANG_ZHCN == g_iUILanguage)
|
|
AfxMessageBox(_T("请选择一行数据!"));
|
|
else
|
|
MessageBoxEx(NULL, _T("Please chose one item data!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
|
return;
|
|
}
|
|
|
|
if (!CheckInputIsValid())
|
|
{
|
|
return;
|
|
}
|
|
if (!CalculateK())
|
|
{
|
|
return;
|
|
}
|
|
CString szLabel;
|
|
|
|
szLabel.Empty();
|
|
szLabel.Format(_T("%d"), m_iA);
|
|
m_listCustomSpt.SetItemText(nItem, 1, szLabel);
|
|
|
|
szLabel.Empty();
|
|
szLabel.Format(_T("%d"), m_iB);
|
|
m_listCustomSpt.SetItemText(nItem, 2, szLabel);
|
|
|
|
szLabel.Empty();
|
|
szLabel.Format(_T("%d"), m_iM);
|
|
m_listCustomSpt.SetItemText(nItem, 3, szLabel);
|
|
|
|
szLabel.Empty();
|
|
szLabel.Format(_T("%d"), m_iN);
|
|
m_listCustomSpt.SetItemText(nItem, 4, szLabel);
|
|
|
|
szLabel.Empty();
|
|
szLabel.Format(_T("%f"), m_fK);
|
|
m_listCustomSpt.SetItemText(nItem, 5, szLabel);
|
|
|
|
szLabel.Empty();
|
|
szLabel.Format(_T("%d"), m_iIteration);
|
|
m_listCustomSpt.SetItemText(nItem, 6, szLabel);
|
|
|
|
szLabel.Empty();
|
|
szLabel.Format(_T("%d"), m_iLayer);
|
|
m_listCustomSpt.SetItemText(nItem, 7, szLabel);
|
|
}
|
|
|
|
void CDialCustomSptInput::OnOK()
|
|
{
|
|
// TODO: Add extra validation here
|
|
if (0 == m_listCustomSpt.GetItemCount() )
|
|
{
|
|
if (LANG_ZHCN == g_iUILanguage)
|
|
AfxMessageBox(_T("脚本数据不能为空!"));
|
|
else
|
|
MessageBoxEx(NULL, _T("Script Data can't be zero!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
|
return;
|
|
}
|
|
CDialog::OnOK();
|
|
}
|
|
|
|
BOOL CDialCustomSptInput::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
// TODO: Add extra initialization here
|
|
|
|
InitalListHeaderInfo();
|
|
if (LANG_ZHCN == g_iUILanguage)
|
|
{
|
|
SetWindowText(_T("自定义脚本"));
|
|
GetDlgItem(IDC_RADIO_AUTO_CALC)->SetWindowText(_T("自动"));
|
|
GetDlgItem(IDC_RADIO_HAND_INPUT)->SetWindowText(_T("手动"));
|
|
GetDlgItem(IDC_BUTTON_ADD_LIST)->SetWindowText(_T("增加"));
|
|
GetDlgItem(IDC_BUTTON_MODIFY_LIST)->SetWindowText(_T("修改"));
|
|
GetDlgItem(IDC_BUTTON_DEL_LIST)->SetWindowText(_T("删除"));
|
|
GetDlgItem(IDC_BUTTON_IMPORT)->SetWindowText(_T("导入"));
|
|
GetDlgItem(IDOK)->SetWindowText(_T("完成"));
|
|
GetDlgItem(IDCANCEL)->SetWindowText(_T("取消"));
|
|
|
|
}
|
|
|
|
((CButton *)GetDlgItem(IDC_RADIO_AUTO_CALC))->SetCheck(TRUE);
|
|
((CButton *)GetDlgItem(IDC_RADIO_HAND_INPUT))->SetCheck(FALSE);
|
|
GetDlgItem(IDC_EDIT_CUSTOMSPT_K)->EnableWindow(FALSE);
|
|
|
|
((CEdit*)GetDlgItem(IDC_EDIT_CUSTOMSPT_A))->SetLimitText(7);
|
|
((CEdit*)GetDlgItem(IDC_EDIT_CUSTOMSPT_B))->SetLimitText(7);
|
|
((CEdit*)GetDlgItem(IDC_EDIT_CUSTOMSPT_M))->SetLimitText(7);
|
|
((CEdit*)GetDlgItem(IDC_EDIT_CUSTOMSPT_N))->SetLimitText(7);
|
|
((CEdit*)GetDlgItem(IDC_EDIT_CUSTOMSPT_ITERATION))->SetLimitText(7);
|
|
((CEdit*)GetDlgItem(IDC_EDIT_CUSTOMSPT_LAYER))->SetLimitText(7);
|
|
((CEdit*)GetDlgItem(IDC_EDIT_CUSTOMSPT_K))->SetLimitText(18);
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void CDialCustomSptInput::OnClickListCustomSpt(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
int nCnt = 0, nItem = 0;
|
|
POSITION pos = m_listCustomSpt.GetFirstSelectedItemPosition();
|
|
if (NULL != pos)
|
|
{
|
|
while (pos)
|
|
{
|
|
nCnt++;
|
|
nItem = m_listCustomSpt.GetNextSelectedItem(pos);
|
|
}
|
|
}
|
|
if (0 == nCnt)
|
|
{
|
|
return;
|
|
}
|
|
if (1 != nCnt)
|
|
{
|
|
return;
|
|
}
|
|
CString strVal = _T("");
|
|
strVal.Empty();
|
|
strVal = m_listCustomSpt.GetItemText(nItem, 1);
|
|
m_strA = strVal;
|
|
m_iA = atoi(strVal);
|
|
|
|
strVal.Empty();
|
|
strVal = m_listCustomSpt.GetItemText(nItem, 2);
|
|
m_strB = strVal;
|
|
m_iB = atoi(strVal);
|
|
|
|
strVal.Empty();
|
|
strVal = m_listCustomSpt.GetItemText(nItem, 3);
|
|
m_strM = strVal;
|
|
m_iM = atoi(strVal);
|
|
|
|
strVal.Empty();
|
|
strVal = m_listCustomSpt.GetItemText(nItem, 4);
|
|
m_strN = strVal;
|
|
m_iN = atoi(strVal);
|
|
|
|
strVal.Empty();
|
|
strVal = m_listCustomSpt.GetItemText(nItem, 5);
|
|
m_strK = strVal;
|
|
m_fK = atof(strVal);
|
|
|
|
strVal.Empty();
|
|
strVal = m_listCustomSpt.GetItemText(nItem, 6);
|
|
m_strStacking = strVal;
|
|
m_iIteration = atoi(strVal);
|
|
|
|
strVal.Empty();
|
|
strVal = m_listCustomSpt.GetItemText(nItem, 7);
|
|
m_strLayer = strVal;
|
|
m_iLayer = atoi(strVal);
|
|
|
|
UpdateData(FALSE);
|
|
|
|
*pResult = 0;
|
|
}
|
|
|
|
void CDialCustomSptInput::InitalListHeaderInfo()
|
|
{
|
|
CString strColTitle=_T("");
|
|
int iColIndex = (int)VAL_ZERO;
|
|
|
|
m_listCustomSpt.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP
|
|
| LVS_EX_ONECLICKACTIVATE | LVS_EX_GRIDLINES|LVS_EX_MULTIWORKAREAS);
|
|
|
|
iColIndex++;
|
|
strColTitle.Empty();
|
|
strColTitle.LoadString(IDS_DB_SCRIPT_TSN);
|
|
m_listCustomSpt.InsertColumn(iColIndex, strColTitle, LVCFMT_CENTER, 100);
|
|
|
|
iColIndex++;
|
|
strColTitle.Empty();
|
|
strColTitle.LoadString(IDS_DB_SCRIPT_C1);
|
|
m_listCustomSpt.InsertColumn(iColIndex, strColTitle, LVCFMT_CENTER, 50);
|
|
|
|
|
|
iColIndex++;
|
|
strColTitle.Empty();
|
|
strColTitle.LoadString(IDS_DB_SCRIPT_C2);
|
|
m_listCustomSpt.InsertColumn(iColIndex, strColTitle, LVCFMT_CENTER, 50);
|
|
|
|
iColIndex++;
|
|
strColTitle.Empty();
|
|
strColTitle.LoadString(IDS_DB_SCRIPT_P1);
|
|
m_listCustomSpt.InsertColumn(iColIndex, strColTitle, LVCFMT_CENTER, 50);
|
|
|
|
iColIndex++;
|
|
strColTitle.Empty();
|
|
strColTitle.LoadString(IDS_DB_SCRIPT_P2);
|
|
m_listCustomSpt.InsertColumn(iColIndex, strColTitle, LVCFMT_CENTER, 50);
|
|
|
|
iColIndex++;
|
|
strColTitle.Empty();
|
|
strColTitle.LoadString(IDS_DB_SCRIPT_K);
|
|
m_listCustomSpt.InsertColumn(iColIndex, strColTitle, LVCFMT_CENTER, 100);
|
|
|
|
iColIndex++;
|
|
strColTitle.Empty();
|
|
strColTitle.LoadString(IDS_DB_SCRIPT_N);
|
|
m_listCustomSpt.InsertColumn(iColIndex, strColTitle, LVCFMT_CENTER, 50);
|
|
|
|
iColIndex++;
|
|
strColTitle.Empty();
|
|
strColTitle.LoadString(IDS_DB_SCRIPT_LEVEL);
|
|
m_listCustomSpt.InsertColumn(iColIndex, strColTitle, LVCFMT_CENTER, 50);
|
|
|
|
}
|
|
|
|
void CDialCustomSptInput::OnRadioHandInput()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
if (BST_CHECKED == ((CButton *)GetDlgItem(IDC_RADIO_HAND_INPUT))->GetCheck())
|
|
{
|
|
((CButton *)GetDlgItem(IDC_RADIO_AUTO_CALC))->SetCheck(FALSE);
|
|
GetDlgItem(IDC_EDIT_CUSTOMSPT_K)->EnableWindow(TRUE);
|
|
}
|
|
|
|
|
|
}
|
|
|
|
void CDialCustomSptInput::OnRadioAutoCalc()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
if (BST_CHECKED == ((CButton *)GetDlgItem(IDC_RADIO_AUTO_CALC))->GetCheck())
|
|
{
|
|
((CButton *)GetDlgItem(IDC_RADIO_HAND_INPUT))->SetCheck(FALSE);
|
|
GetDlgItem(IDC_EDIT_CUSTOMSPT_K)->SetWindowText(_T(""));
|
|
GetDlgItem(IDC_EDIT_CUSTOMSPT_K)->EnableWindow(FALSE);
|
|
}
|
|
}
|
|
|
|
bool CDialCustomSptInput::CheckInputIsValid()
|
|
{
|
|
if (!UpdateData(TRUE))
|
|
{
|
|
MessageBoxEx(NULL, _T("Retrieve data failed."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
|
return false;
|
|
}
|
|
//A
|
|
if ((-1 != atoi(m_strA)) && !bIsPostiveInteger(m_strA))
|
|
{
|
|
if (LANG_ZHCN == g_iUILanguage)
|
|
AfxMessageBox(_T("A的值须为正数或者-1!"));
|
|
else
|
|
MessageBoxEx(NULL, _T("A has to be positive or minus 1!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
|
return false;
|
|
}
|
|
m_iA = atoi(m_strA);
|
|
//B 无穷大只会是-1
|
|
if ((-1 != atoi(m_strB)) && !bIsPostiveInteger(m_strB))
|
|
{
|
|
m_iB = atoi(m_strB);
|
|
if (m_iB != -1)
|
|
{
|
|
if (LANG_ZHCN == g_iUILanguage)
|
|
AfxMessageBox(_T("B的值须为正数或者-1!"));
|
|
else
|
|
MessageBoxEx(NULL, _T("B has to be positive or minus 1!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
|
return false;
|
|
}
|
|
}
|
|
m_iB = atoi(m_strB);
|
|
//M
|
|
if ((-1 != atoi(m_strM)) && !bIsPostiveInteger(m_strM))
|
|
{
|
|
if (LANG_ZHCN == g_iUILanguage)
|
|
AfxMessageBox(_T("M的值须为正数或者-1!"));
|
|
else
|
|
MessageBoxEx(NULL, _T("M has to be positive or minus 1!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
|
return false;
|
|
}
|
|
m_iM = atoi(m_strM);
|
|
//N
|
|
if ((-1 != atoi(m_strN)) && !bIsPostiveInteger(m_strN))
|
|
{
|
|
if (LANG_ZHCN == g_iUILanguage)
|
|
AfxMessageBox(_T("N的值须为正数或者-1!"));
|
|
else
|
|
MessageBoxEx(NULL, _T("N has to be positive or minus 1!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
|
return false;
|
|
}
|
|
m_iN = atoi(m_strN);
|
|
//Layer
|
|
if (!bIsPostiveInteger(m_strLayer))
|
|
{
|
|
if (LANG_ZHCN == g_iUILanguage)
|
|
AfxMessageBox(_T("层数的值须为正数!"));
|
|
else
|
|
MessageBoxEx(NULL, _T("Please input a positive number on Layer."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
|
return false;
|
|
}
|
|
m_iLayer = atoi(m_strLayer);
|
|
//Stacking
|
|
if (!bIsPostiveInteger(m_strStacking))
|
|
{
|
|
if (LANG_ZHCN == g_iUILanguage)
|
|
AfxMessageBox(_T("迭代数的值须为正数!"));
|
|
else
|
|
MessageBoxEx(NULL, _T("Please input a positive number on Stacking."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
|
return false;
|
|
}
|
|
m_iIteration = atoi(m_strStacking);
|
|
if (m_iIteration < 1 || m_iIteration > 255)
|
|
{
|
|
if (LANG_ZHCN == g_iUILanguage)
|
|
AfxMessageBox(_T("迭代数错误,请输入一个从1到255的整数!"));
|
|
else
|
|
MessageBoxEx(NULL, _T("Stacking number input error!please input an integer from 1 to 255!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
|
return false;
|
|
}
|
|
|
|
//K
|
|
if (BST_CHECKED == ((CButton *)GetDlgItem(IDC_RADIO_HAND_INPUT))->GetCheck())
|
|
{
|
|
if (!bIsFloat(m_strK))
|
|
{
|
|
if (LANG_ZHCN == g_iUILanguage)
|
|
AfxMessageBox(_T("K值输入错误!"));
|
|
else
|
|
MessageBoxEx(NULL, _T("Please input number on K.!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
|
return false;
|
|
}
|
|
m_fK = atof(m_strK);//m_fK = fabs(atof(m_strK));//by quyx 20180514 K值可为负
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
bool CDialCustomSptInput::CalculateK()
|
|
{
|
|
//如果设置成自动计算则此时需要进行计算
|
|
if (BST_CHECKED == ((CButton *)GetDlgItem(IDC_RADIO_AUTO_CALC))->GetCheck())
|
|
{
|
|
int iAM = fabs(float(m_iA - m_iM));
|
|
int iAN = fabs(float(m_iA - m_iN));
|
|
int iBM = fabs(float(m_iB - m_iM));
|
|
int iBN = fabs(float(m_iB - m_iN));
|
|
//AM装置,存在BN等于0的情况
|
|
if (0 == iAM || 0 == iAN || 0 == iBM /*|| 0 == iBN*/)
|
|
{
|
|
if (LANG_ZHCN == g_iUILanguage)
|
|
AfxMessageBox(_T("任意2个电极之间的距离都不能为零!"));
|
|
else
|
|
MessageBoxEx(NULL, _T("The position of any two electrodes can not be equal!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
|
return false;
|
|
}
|
|
float fAMCal = 1.0/iAM;
|
|
float fANCal = 1.0/iAN;
|
|
float fBMCal = 1.0/iBM;
|
|
float fBNCal = 1.0/iBN;
|
|
if (m_iA < 0)
|
|
{
|
|
fAMCal = 0;
|
|
fANCal = 0;
|
|
}
|
|
if (m_iB < 0)
|
|
{
|
|
fBMCal = 0;
|
|
fBNCal = 0;
|
|
}
|
|
if (m_iM < 0)
|
|
{
|
|
fAMCal = 0;
|
|
fBMCal = 0;
|
|
}
|
|
if (m_iN < 0)
|
|
{
|
|
fANCal = 0;
|
|
fBNCal = 0;
|
|
}
|
|
//float fTmp = fabs(fAMCal - fANCal - fBMCal + fBNCal);
|
|
float fTmp = (fAMCal - fANCal - fBMCal + fBNCal);//by quyx 20180514 K值可为负
|
|
if (0 == fTmp)
|
|
{
|
|
if (LANG_ZHCN == g_iUILanguage)
|
|
AfxMessageBox(_T("自动计算K值错误,请检查输入!"));
|
|
else
|
|
MessageBoxEx(NULL, _T("Automatic calculate K error,please check your input value!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
|
return false;
|
|
}
|
|
m_fK = 1;//2*VAL_PI/fTmp;
|
|
}
|
|
/*if (m_fK <= 0) //by quyx 20180514 K值可为负
|
|
{
|
|
if (LANG_ZHCN == g_iUILanguage)
|
|
AfxMessageBox(_T("K值计算错误!"));
|
|
else
|
|
AfxMessageBox(_T("The value of K error!"));
|
|
return false;
|
|
}*/
|
|
return true;
|
|
}
|
|
|
|
|
|
CString CDialCustomSptInput::GetListItemText(int iIndex, int iSubIndex)
|
|
{
|
|
CString strRes = _T("");
|
|
if (iIndex < 0 || iSubIndex < 0)
|
|
{
|
|
MessageBoxEx(NULL, _T("Input parameter error in GetListItemText!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
|
return strRes;
|
|
}
|
|
strRes = m_listCustomSpt.GetItemText(iIndex, iSubIndex);
|
|
return strRes;
|
|
}
|
|
|
|
void CDialCustomSptInput::OnButtonImport()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
|
|
CString strCaption = _T("");
|
|
CString strFileName = _T("");
|
|
CString strText = _T("");
|
|
strCaption.LoadString(IDS_OPEN);
|
|
CFileDialog *pDlgOpenFile = NULL;
|
|
pDlgOpenFile = new CFileDialog (TRUE , NULL, NULL, OFN_HIDEREADONLY|OFN_FILEMUSTEXIST|OFN_NOCHANGEDIR,
|
|
_T("Excel file(*.xlsx)|*.xlsx||"),this);
|
|
pDlgOpenFile->m_ofn.lpstrTitle = strCaption;
|
|
if (IDOK != pDlgOpenFile->DoModal())
|
|
{
|
|
return;
|
|
}
|
|
strFileName = pDlgOpenFile->GetPathName();
|
|
delete pDlgOpenFile;
|
|
|
|
_Application ComApp;
|
|
Workbooks comBooks;
|
|
_Workbook comBook;
|
|
Sheets comSheets;
|
|
_Worksheet comSheet01;
|
|
Range objRange;
|
|
VARIANT vRet;
|
|
COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
|
|
|
|
if( !ComApp.CreateDispatch(_T("Excel.Application"), NULL) )
|
|
{
|
|
hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL);
|
|
MessageBoxEx(NULL, _T("Can't build excel application!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
|
ComApp.Quit();
|
|
return ;
|
|
}
|
|
|
|
comBooks = ComApp.GetWorkbooks();
|
|
comBook = comBooks.Open(strFileName, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional);
|
|
comSheets = comBook.GetWorksheets();
|
|
comSheet01 = comSheets.GetItem(COleVariant((short)1));
|
|
|
|
objRange = comSheet01.GetUsedRange();
|
|
// 取行列数
|
|
vRet = objRange.GetValue(VOptional);
|
|
COleSafeArray oleSA(vRet);
|
|
long lNumRows;
|
|
long lNumCols = 7;
|
|
|
|
oleSA.GetUBound(1, &lNumRows);
|
|
|
|
if (lNumRows <= 1)
|
|
{
|
|
if (LANG_ZHCN == g_iUILanguage)
|
|
{
|
|
strText = (_T("在sheet1处没有数据!"));
|
|
AfxMessageBox(strText);
|
|
}
|
|
else
|
|
{
|
|
strText.Format(_T("No data in sheet1(%s)"), strFileName);
|
|
MessageBoxEx(NULL, strText, STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
|
}
|
|
|
|
objRange.Clear();
|
|
comBook.Close(COleVariant((short)FALSE),VOptional,VOptional);
|
|
comBooks.Close();
|
|
ComApp.Quit();
|
|
ComApp.ReleaseDispatch();
|
|
}
|
|
|
|
int iRecIndex = 0;
|
|
int iTsn = 0;
|
|
if (m_listCustomSpt.GetItemCount() != 0)
|
|
{
|
|
CCustomSptQueryDial CustQueDial;
|
|
CustQueDial.DoModal();
|
|
int nOperRes = CustQueDial.GetOperResult();
|
|
if (EN_QUE_APPEND == nOperRes)
|
|
{
|
|
iRecIndex = m_listCustomSpt.GetItemCount();
|
|
iTsn = atoi(m_listCustomSpt.GetItemText(iRecIndex-1, 0));
|
|
}
|
|
else if (EN_QUE_REPLACE == nOperRes)
|
|
{
|
|
m_listCustomSpt.DeleteAllItems();
|
|
}
|
|
else
|
|
{
|
|
objRange.Clear();
|
|
comBook.Close(COleVariant((short)FALSE),VOptional,VOptional);
|
|
comBooks.Close();
|
|
ComApp.Quit();
|
|
ComApp.ReleaseDispatch();
|
|
return;
|
|
}
|
|
}
|
|
|
|
//在这里固定取前7列
|
|
lNumCols = 7;
|
|
|
|
TCHAR tCh = _T('A');
|
|
CString strTitle = _T("");
|
|
//行数从1开始,并且第一行是数据的标题
|
|
for (int i = 2; i <= lNumRows; i++)
|
|
{
|
|
m_listCustomSpt.InsertItem(iRecIndex+i-2,_T(""));
|
|
iTsn++;
|
|
strText.Empty();
|
|
strText.Format(_T("%d"),iTsn);
|
|
m_listCustomSpt.SetItemText(iRecIndex+i-2, 0, strText);
|
|
for (int j = 0; j < lNumCols; j++)
|
|
{
|
|
strTitle.Empty();
|
|
strTitle.Format(_T("%c%d"),tCh+j, i);
|
|
strText.Empty();
|
|
Range rangeVal=comSheet01.GetRange(COleVariant(strTitle),COleVariant(strTitle));
|
|
COleVariant rValue;
|
|
rValue=COleVariant(rangeVal.GetValue2());
|
|
rValue.ChangeType(VT_BSTR);
|
|
strText = CString(rValue.bstrVal);
|
|
if (strText.IsEmpty())
|
|
{
|
|
if (LANG_ZHCN == g_iUILanguage)
|
|
{
|
|
strText.Format(_T("从Excel获取 %s 数据失败!"), strTitle);
|
|
AfxMessageBox(strText);
|
|
}
|
|
else
|
|
{
|
|
strText.Format(_T("Get %s data in excel failed!"), strTitle);
|
|
MessageBoxEx(NULL, strText, STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
|
}
|
|
|
|
objRange.Clear();
|
|
comBook.Close(COleVariant((short)FALSE),VOptional,VOptional);
|
|
comBooks.Close();
|
|
ComApp.Quit();
|
|
ComApp.ReleaseDispatch();
|
|
return;
|
|
}
|
|
m_listCustomSpt.SetItemText(iRecIndex+i-2, j+1, strText);
|
|
}
|
|
}
|
|
|
|
objRange.Clear();
|
|
comBook.Close(COleVariant((short)FALSE),VOptional,VOptional);
|
|
comBooks.Close();
|
|
ComApp.Quit();
|
|
ComApp.ReleaseDispatch();
|
|
if (LANG_ZHCN == g_iUILanguage)
|
|
AfxMessageBox(_T("导入文件成功!"));
|
|
else
|
|
MessageBoxEx(NULL, _T("Import file success."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
|
return;
|
|
|
|
|
|
|
|
}
|