?? 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 + -