⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nodeinfodlg.cpp

📁 功能主要是串口通信和网络通信方面的
💻 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 + -