📄 nodeinfodlg.cpp
字号:
// NodeInfoDlg.cpp : implementation file
//
#include "stdafx.h"
#include "FakeTolcan.h"
#include "NodeInfoDlg.h"
#include "ADOConn.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CNodeInfoDlg dialog
CNodeInfoDlg::CNodeInfoDlg(CWnd* pParent /*=NULL*/)
: CDialog(CNodeInfoDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CNodeInfoDlg)
m_strBigInterval = _T("");
m_strByteNum = _T("");
m_strSmallInterval = _T("");
m_strWayNum = _T("");
m_strNodeNo = _T("");
m_strMonth = _T("");
m_strNodeType = _T("");
m_strBound = _T("");
m_strBase = _T("");
m_strFirstValue = _T("");
m_strMaxValue = _T("");
m_strMinValue = _T("");
m_strStep = _T("");
//}}AFX_DATA_INIT
strNodeId = _T("");
strNodeNo = _T("");
strMonth = _T("0");
strNodeType = _T("");
strByteNum = _T("2");
strNodeOrder = _T("0");
strSmallInterval = _T("100");
strBigInterval = _T("1000");
strWayNum = _T("1");
m_bModify = FALSE;
m_cNodeType = 0;
m_cMonth = 0;
m_uNodeNo = 0;
m_dwNodeId = 0;
}
void CNodeInfoDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CNodeInfoDlg)
DDX_Control(pDX, IDC_COMBO_NODE_TYPE, m_cboNodeType);
DDX_CBString(pDX, IDC_COMBO_BIG_INTERVAL, m_strBigInterval);
DDX_CBString(pDX, IDC_COMBO_BYTE_NUM, m_strByteNum);
DDX_CBString(pDX, IDC_COMBO_SMALL_INTERVAL, m_strSmallInterval);
DDX_CBString(pDX, IDC_COMBO_WAY_NUM, m_strWayNum);
DDX_Text(pDX, IDC_EDIT_NODE_NO, m_strNodeNo);
DDX_Text(pDX, IDC_EDIT_MONTH, m_strMonth);
DDX_CBString(pDX, IDC_COMBO_NODE_TYPE, m_strNodeType);
DDX_Text(pDX, IDC_EDIT_BOUND, m_strBound);
DDX_Text(pDX, IDC_EDIT_BASE_VALUE, m_strBase);
DDX_Text(pDX, IDC_EDIT_FIRST_VALUE2, m_strFirstValue);
DDX_Text(pDX, IDC_EDIT_MAX_VALUE2, m_strMaxValue);
DDX_Text(pDX, IDC_EDIT_MIN_VALUE2, m_strMinValue);
DDX_Text(pDX, IDC_EDIT_STEP2, m_strStep);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CNodeInfoDlg, CDialog)
//{{AFX_MSG_MAP(CNodeInfoDlg)
ON_WM_VSCROLL()
ON_CBN_SELCHANGE(IDC_COMBO_NODE_TYPE, OnSelchangeComboNodeType)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CNodeInfoDlg message handlers
BOOL CNodeInfoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
GetDlgItem(IDC_EDIT_BASE_VALUE)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_BOUND)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_MIN_VALUE2)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_MAX_VALUE2)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_FIRST_VALUE2)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_STEP2)->EnableWindow(FALSE);
((CSpinButtonCtrl *)GetDlgItem(IDC_SPIN1))->SetRange(0, 255);
// m_strNodeId = strNodeId;
m_strNodeNo = strNodeNo;
m_strMonth = strMonth;
m_strNodeType = strNodeType;
m_strByteNum = strByteNum;
// m_strNodeOrder = strNodeOrder;
m_strSmallInterval = strSmallInterval;
m_strWayNum = strWayNum;
// m_strBigInterval = strBigInterval;
UpdateData(FALSE);
CString strPackInterval;
strPackInterval.Format("%d", m_PackInterval);
// m_strBigInterval = strPackInterval;
SetDlgItemText(IDC_COMBO_BIG_INTERVAL, strPackInterval);
if (m_bModify)
{
SetWindowText(_T("修改节点"));
if (m_strNodeType == "深度节点")
{
GetDlgItem(IDC_EDIT_BASE_VALUE)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_BOUND)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_MIN_VALUE2)->EnableWindow(TRUE);
GetDlgItem(IDC_EDIT_MAX_VALUE2)->EnableWindow(TRUE);
GetDlgItem(IDC_EDIT_FIRST_VALUE2)->EnableWindow(TRUE);
GetDlgItem(IDC_EDIT_STEP2)->EnableWindow(TRUE);
}
else if (m_strNodeType == "泵冲节点" || m_strNodeType == "4-20mA模拟节点")
{
GetDlgItem(IDC_EDIT_BASE_VALUE)->EnableWindow(TRUE);
GetDlgItem(IDC_EDIT_BOUND)->EnableWindow(TRUE);
GetDlgItem(IDC_EDIT_MIN_VALUE2)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_MAX_VALUE2)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_FIRST_VALUE2)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_STEP2)->EnableWindow(FALSE);
}
}
else
{
SetWindowText(_T("添加节点"));
}
// UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CNodeInfoDlg::OnOK()
{
// TODO: Add extra validation here
UpdateData();
if (m_strNodeNo.IsEmpty())
{
MessageBox("请输入节点编号", "温馨提示", MB_ICONASTERISK | MB_ICONINFORMATION);
return;
}
else//if ()
{
int iNodeNo = atoi(m_strNodeNo);
if (iNodeNo < 1000 || iNodeNo > 65536)
{
MessageBox("无效的节点编号,\r\n节点编号在1000-65536之间,\r\n请重新输入节点编号", "温馨提示",\
MB_ICONASTERISK | MB_ICONINFORMATION);
return;
}
}
if(!m_bModify)
if (IsExistNodeNo())
// if (IsExistNodeId())
{
MessageBox("该节点编号已经存在于列表中,\r\n请重新输入节点编号", "温馨提示", MB_ICONASTERISK | MB_ICONINFORMATION);
return;
}
if (m_strMonth.IsEmpty())
{
MessageBox("请输入生产月数", "温馨提示", MB_ICONASTERISK | MB_ICONINFORMATION);
return;
}
else
{
int iMonth = atoi(m_strMonth);
if (iMonth < 0 || iMonth > 255)
{
MessageBox("生产月数在0-255之间,\r\n请重新输入生产月数", "温馨提示",\
MB_ICONASTERISK | MB_ICONINFORMATION);
return;
}
}
if (m_strNodeType.IsEmpty())
{
MessageBox("请选择节点类型", "温馨提示", MB_ICONASTERISK | MB_ICONINFORMATION);
return;
}
if (m_strNodeType == "深度节点")
{
if (m_strMinValue.IsEmpty() || m_strMaxValue.IsEmpty() ||\
m_strFirstValue.IsEmpty() || m_strStep.IsEmpty())
{
MessageBox("不能为空,请设置节点的数据范围", "温馨提示", MB_ICONASTERISK | MB_ICONINFORMATION);
return;
}
else
{
int minVal = atoi(m_strMinValue);
int maxVal = atoi(m_strMaxValue);
int firstVal = atoi(m_strFirstValue);
int stepVal = atoi(m_strStep);
if (minVal >= maxVal)
{
MessageBox("最小值应该比最大值小才对!", "温馨提示", MB_ICONASTERISK | MB_ICONINFORMATION);
return;
}
if ((firstVal < minVal) || (firstVal >= maxVal))
{
MessageBox("初始值应在最小值和最大值之间才对!", "温馨提示", MB_ICONASTERISK | MB_ICONINFORMATION);
return;
}
}
}
if (m_strNodeType == "泵冲节点" || m_strNodeType == "4-20mA模拟节点")
{
if (m_strBase.IsEmpty() || m_strBound.IsEmpty())
{
MessageBox("不能为空,请设置节点的数据范围", "温馨提示", MB_ICONASTERISK | MB_ICONINFORMATION);
return;
}
else
{
int baseVal = atoi(m_strBase);
int boundVal = atoi(m_strBound);
if (boundVal >= baseVal)
{
MessageBox("范围比基值小才对!", "温馨提示", MB_ICONASTERISK | MB_ICONINFORMATION);
return;
}
}
}
m_cNodeType = m_cboNodeType.GetCurSel();
m_cMonth = atoi(m_strMonth);
m_uNodeNo = atoi(m_strNodeNo);
BYTE NodeId[4];
memcpy(NodeId, &m_uNodeNo, 2);
memcpy(NodeId + 2, &m_cMonth, 1);
memcpy(NodeId + 3, &m_cNodeType, 1);
memcpy(&m_dwNodeId, NodeId, 4);
// m_strNodeId.Format("%08X", m_dwNodeId);
m_strNodeId2.Format("%08X", m_dwNodeId);
CString strPackInterval;
strPackInterval.Format("%d", m_PackInterval);
if (m_strBigInterval != strPackInterval)
{
CString str;
str = "数据包间隔为:";
str += strPackInterval;
str += "ms\r\n";
str += "请输入与数据包间隔相等的时间";
MessageBox(str, "温馨提示", MB_ICONASTERISK | MB_ICONINFORMATION);
// m_strBigInterval = strPackInterval;
SetDlgItemText(IDC_COMBO_BIG_INTERVAL, strPackInterval);
// UpdateData(FALSE);
return;
}
CDialog::OnOK();
}
BOOL CNodeInfoDlg::IsExistNodeId()
{
/* ADOConn m_AdoConn;
m_AdoConn.OnInitADOConn();
_RecordsetPtr m_pRecordset;
CString vSQL = "select count(*) as cn from Nodes where NodeId=";
vSQL += "'" + m_strNodeId + "'";
m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)vSQL);
BYTE num = m_pRecordset->GetCollect("cn");
m_AdoConn.ExitConnect();
return (num > 0 ? 1 : 0);*/
return 0;
}
BOOL CNodeInfoDlg::IsExistNodeNo()
{
ADOConn m_AdoConn;
m_AdoConn.OnInitADOConn();
_RecordsetPtr m_pRecordset;
CString vSQL = "select count(*) as cn from Nodes where NodeNo=";
vSQL += "'" + m_strNodeNo + "'";
m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)vSQL);
BYTE num = m_pRecordset->GetCollect("cn");
m_AdoConn.ExitConnect();
return (num > 0 ? 1 : 0);
}
void CNodeInfoDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
if (pScrollBar->GetDlgCtrlID() == IDC_SPIN1)
{
CString str;
str.Format("%d", nPos);
((CSpinButtonCtrl*)pScrollBar)->GetBuddy()->SetWindowText(str);
}
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}
void CNodeInfoDlg::OnSelchangeComboNodeType()
{
// TODO: Add your control notification handler code here
CComboBox *pCB = (CComboBox *)GetDlgItem(IDC_COMBO_NODE_TYPE);
int iIndex = pCB->GetCurSel();
if (iIndex == 1 || 2 == iIndex)
{
GetDlgItem(IDC_EDIT_BASE_VALUE)->EnableWindow(TRUE);
GetDlgItem(IDC_EDIT_BOUND)->EnableWindow(TRUE);
GetDlgItem(IDC_EDIT_MIN_VALUE2)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_MAX_VALUE2)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_FIRST_VALUE2)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_STEP2)->EnableWindow(FALSE);
}
if (0 == iIndex)
{
GetDlgItem(IDC_EDIT_BASE_VALUE)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_BOUND)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_MIN_VALUE2)->EnableWindow(TRUE);
GetDlgItem(IDC_EDIT_MAX_VALUE2)->EnableWindow(TRUE);
GetDlgItem(IDC_EDIT_FIRST_VALUE2)->EnableWindow(TRUE);
GetDlgItem(IDC_EDIT_STEP2)->EnableWindow(TRUE);
}
if (3 == iIndex)
{
GetDlgItem(IDC_EDIT_BASE_VALUE)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_BOUND)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_MIN_VALUE2)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_MAX_VALUE2)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_FIRST_VALUE2)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_STEP2)->EnableWindow(FALSE);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -