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

📄 groupdlg.cpp

📁 opc 源码 opc 源码
💻 CPP
字号:
// GroupDlg.cpp : implementation file
//

#include "stdafx.h"
#include "VCOPCClient.h"
#include "GroupDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CGroupDlg dialog

CGroupDlg::CGroupDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CGroupDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CGroupDlg)
	m_bActive = FALSE;
	m_DeadBand = 0.0f;
	m_GroupName = _T("");
	m_UpdateRate = 0;
	//}}AFX_DATA_INIT
	m_pView = NULL;
}


void CGroupDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CGroupDlg)
	DDX_Control(pDX, IDC_LIST_CONNECTED_GROUP, m_listConnectedGroup);
	DDX_Control(pDX, IDC_COMBO_SERVER, m_cmbServer);
	DDX_Check(pDX, IDC_CHECK_ACTIVE, m_bActive);
	DDX_Text(pDX, IDC_EDIT_DEADBAND, m_DeadBand);
	DDV_MinMaxFloat(pDX, m_DeadBand, 0.f, 1.f);
	DDX_Text(pDX, IDC_EDIT_GROUPNAME, m_GroupName);
	DDX_Text(pDX, IDC_EDIT_UPDATERATE, m_UpdateRate);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CGroupDlg, CDialog)
	//{{AFX_MSG_MAP(CGroupDlg)
	ON_BN_CLICKED(IDC_BUTTON_ADDGROUP, OnButtonAddgroup)
	ON_BN_CLICKED(IDC_BUTTON_REMOVEGROUP, OnButtonRemovegroup)
	ON_LBN_SELCHANGE(IDC_LIST_CONNECTED_GROUP, OnSelchangeListConnectedGroup)
	ON_CBN_SELCHANGE(IDC_COMBO_SERVER, OnSelchangeComboServer)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CGroupDlg message handlers
void CGroupDlg::PopulateGroupList(CString& strServer)
{
	if ( strServer.IsEmpty() )
		return;

	CConnection* pConn = m_pView->GetConnection(strServer);
	
	if ( NULL != pConn )
	{
		m_listConnectedGroup.ResetContent();

		for( vector<CGroup*>::iterator iter = pConn->m_Groups.begin();
			 iter != pConn->m_Groups.end();
			 ++iter)
		{
			m_listConnectedGroup.AddString((*iter)->m_Name);
		}
	}
}

BOOL CGroupDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	m_bActive = TRUE;
	m_DeadBand = 0.0f;
	m_GroupName = "Group1";
	m_UpdateRate = 1000;

	UpdateData(FALSE);
	
	for( vector<CConnection*>::iterator iter = m_pView->m_Connections.begin();
		 iter != m_pView->m_Connections.end(); 
		 ++iter)
	{
		m_cmbServer.AddString((*iter)->m_ServerName);
	}
	m_cmbServer.SetCurSel(0);

	CString strServer;
	m_cmbServer.GetLBText(0, strServer);

	PopulateGroupList(strServer);

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CGroupDlg::OnButtonAddgroup() 
{
	UpdateData();

	int nIndex = m_cmbServer.GetCurSel();
	CString strServer;
	m_cmbServer.GetLBText(nIndex, strServer);
	CConnection* pConn = m_pView->GetConnection(strServer);

	HANDLE hGroup = AddGroup( pConn->m_hServer, m_GroupName, m_bActive, m_UpdateRate, 
							  NULL, &m_DeadBand, 0 );

	if (hGroup != INVALID_HANDLE_VALUE)
	{
		CGroup* pGroup = new CGroup();
		pGroup->m_Handle = hGroup;
		pGroup->m_Name = m_GroupName;
		pConn->m_Groups.push_back(pGroup);
	}

	PopulateGroupList(strServer);
}

void CGroupDlg::OnButtonRemovegroup() 
{
	UpdateData();

	int nIndex = m_cmbServer.GetCurSel();
	CString strServer;
	m_cmbServer.GetLBText(nIndex, strServer);
	CConnection* pConn = m_pView->GetConnection(strServer);

	nIndex = m_listConnectedGroup.GetCurSel();
	if (nIndex >= 0) 
	{
		CString strGroup;
		m_listConnectedGroup.GetText(nIndex, strGroup);
		CGroup* pGroup = pConn->GetGroup(strGroup);
		if ( NULL != pGroup )
		{
			RemoveGroup(pConn->m_hServer, pGroup->m_Handle);
			pConn->EraseGroup(strGroup);
			delete pGroup;
			PopulateGroupList(strServer);
		}		
	}
}

void CGroupDlg::OnSelchangeListConnectedGroup() 
{
	int nIndex = m_cmbServer.GetCurSel();
	CString strServer;
	m_cmbServer.GetLBText(nIndex, strServer);
	CConnection* pConn = m_pView->GetConnection(strServer);

	nIndex = m_listConnectedGroup.GetCurSel();
	if (nIndex >= 0) 
	{
		CString strGroup;
		m_listConnectedGroup.GetText(nIndex, strGroup);
		CGroup* pGroup = pConn->GetGroup(strGroup);
		if ( NULL != pGroup )
		{
			char name[255];
			DWORD Rate;
			BOOL bActive;
			LONG TimeBias;
			float DeadBand;
			DWORD lcid;

			if (GetGroupState(pConn->m_hServer, pGroup->m_Handle, name, 255, &Rate, 
				              &bActive, &TimeBias, &DeadBand, &lcid))
			{
				m_UpdateRate = Rate;
				m_bActive = bActive;
				m_DeadBand = DeadBand;
				UpdateData(FALSE);
			}
		}
	}
}

void CGroupDlg::OnSelchangeComboServer() 
{
	int nIndex = m_cmbServer.GetCurSel();
	CString strServer;
	m_cmbServer.GetLBText(nIndex, strServer);
	
	PopulateGroupList(strServer);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -