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

📄 testsvrview.cpp

📁 OPCserver OPCserver.rar
💻 CPP
字号:
// TestSvrView.cpp : implementation of the CTestSvrView class
//

#include "stdafx.h"
#include "TestSvr.h"

#include "TestSvrDoc.h"
#include "TestSvrView.h"
#include "MainFrm.h"
#include "DlgAddItem.h"

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

/////////////////////////////////////////////////////////////////////////////
// CTestSvrView

IMPLEMENT_DYNCREATE(CTestSvrView, CListView)

BEGIN_MESSAGE_MAP(CTestSvrView, CListView)
	//{{AFX_MSG_MAP(CTestSvrView)
	ON_UPDATE_COMMAND_UI(ID_Menu_AddItem, OnUpdateMenuAddItem)
	ON_COMMAND(ID_Menu_AddItem, OnMenuAddItem)
	ON_UPDATE_COMMAND_UI(ID_Menu_DelItem, OnUpdateMenuDelItem)
	ON_COMMAND(ID_Menu_DelItem, OnMenuDelItem)
	ON_COMMAND(ID_Menu_Register, OnMenuRegister)
	ON_UPDATE_COMMAND_UI(ID_Menu_Register, OnUpdateMenuRegister)
	ON_COMMAND(ID_Menu_SvrStatus, OnMenuSvrStatus)
	ON_UPDATE_COMMAND_UI(ID_Menu_SvrStatus, OnUpdateMenuSvrStatus)
	ON_COMMAND(ID_Menu_UnRegister, OnMenuUnRegister)
	ON_UPDATE_COMMAND_UI(ID_Menu_UnRegister, OnUpdateMenuUnRegister)
	ON_WM_LBUTTONDOWN()
	ON_COMMAND(ID_APP_EXIT, OnAppExit)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CListView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CListView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CListView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTestSvrView construction/destruction

CTestSvrView::CTestSvrView()
{
	// TODO: add construction code here
	//Init
    OnInitOpcServer ();
	//刷新的数据指针
	iRefreshIndex=0;
	iCurRow=-1;
    
}

CTestSvrView::~CTestSvrView()
{   
	//Clean Memory
    int iTagCounts =m_TagList.GetSize ();
	for (int i  =0;i<iTagCounts;i++){
	   delete m_TagList[i];
	}
    m_TagList.RemoveAll ();
	//UnInit
	OnUnInitOpcServer();
} 

BOOL CTestSvrView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CListView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CTestSvrView drawing

void CTestSvrView::OnDraw(CDC* pDC)
{
	CTestSvrDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
}

void CTestSvrView::OnInitialUpdate()
{
	CListView::OnInitialUpdate();
    CListCtrl& m_ListCtrl=GetListCtrl ();
	 
	ModifyStyle(NULL, LVS_REPORT, 0);
	m_ListCtrl.SetExtendedStyle (LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_GRIDLINES);
	m_ListCtrl.InsertColumn(0, "tagname", LVCFMT_LEFT, 100); 
	m_ListCtrl.InsertColumn(1, "Handle", LVCFMT_LEFT, 80); 
	m_ListCtrl.InsertColumn(2, "Value", LVCFMT_LEFT, 120); 
	m_ListCtrl.InsertColumn(3, "Type", LVCFMT_LEFT, 60); 
	m_ListCtrl.InsertColumn(4, "Quality", LVCFMT_LEFT, 130); 
	m_ListCtrl.InsertColumn(5, "TimeStamp", LVCFMT_LEFT, 200); 
	m_ListCtrl.InsertColumn(6, "Description", LVCFMT_LEFT, 160); 

    CMainFrame *pMainWnd;
    pMainWnd=(CMainFrame *)(AfxGetApp()->m_pMainWnd);
    pMainWnd->OnMenuStart ();
	//新增一些固定点
 	CString m_name;
	VARIANT m_value;
	CString m_sValue;
	CString m_description;	
	int m_type;
	int i;
	for (i =1 ;i<=12;i++){	 
		m_name.Format ("tag%d",i);
		m_description=m_name+"注解";
		m_type = div(i ,4).rem  ;
		m_sValue= "1" ;    
		BOOL bResult =FormatStringToVARIANT(m_type,&m_value,m_sValue);
		if (bResult==TRUE) 
			if ( OnAddItem(m_name,m_type,m_value,m_description)==TRUE){
				AddItemToListCtrl();//Add To ListCtrl 
			}
		VariantClear (&m_value);
	}
	// TODO: You may populate your ListView with items by directly accessing
	//  its list control through a call to GetListCtrl(). 
}

/////////////////////////////////////////////////////////////////////////////
// CTestSvrView printing

BOOL CTestSvrView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CTestSvrView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CTestSvrView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CTestSvrView diagnostics

#ifdef _DEBUG
void CTestSvrView::AssertValid() const
{
	CListView::AssertValid();
}

void CTestSvrView::Dump(CDumpContext& dc) const
{
	CListView::Dump(dc);
}

CTestSvrDoc* CTestSvrView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTestSvrDoc)));
	return (CTestSvrDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CTestSvrView message handlers

void CTestSvrView::OnUpdateMenuAddItem(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	
}

void CTestSvrView::OnMenuAddItem() 
{
	// TODO: Add your command handler code here
	
	CDlgAddItem m_DlgAddItem;
	CString m_name;
	VARIANT m_value;
	CString m_sValue;
	CString m_description;	
	int m_type;
	if (m_DlgAddItem.DoModal ()!=IDOK) return;
    m_name =m_DlgAddItem.m_TagName;
	m_description=m_DlgAddItem.m_Descr;
	m_type = m_DlgAddItem.m_iType;
    m_sValue= m_DlgAddItem.m_Value ;
    
	BOOL bResult =FormatStringToVARIANT(m_type,&m_value,m_sValue);
	if (bResult==TRUE) 
		if ( OnAddItem(m_name,m_type,m_value,m_description)==TRUE){
		    AddItemToListCtrl();//Add To ListCtrl 
		}
    VariantClear (&m_value);
	
}

void CTestSvrView::OnUpdateMenuDelItem(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	
}

void CTestSvrView::OnMenuDelItem() 
{
	// TODO: Add your command handler code here
    int iIndex;
	CListCtrl& m_ListCtrl = GetListCtrl();
	int iItemCounts = m_ListCtrl.GetItemCount ();
	if (iItemCounts<1) {
		AfxMessageBox("No Item!");		
		return   ;
	}
	 
	iIndex =iCurRow; 
	OnDelItem(iIndex);	  
    RemoveItemFromListCtrl(iIndex);
	   
}


void CTestSvrView::OnMenuSvrStatus() 
{
	// TODO: Add your command handler code here
	
//typedef enum tagOPCSERVERSTATE
    //{	OPC_STATUS_RUNNING	= 1,
	//OPC_STATUS_FAILED	= OPC_STATUS_RUNNING + 1,
	//OPC_STATUS_NOCONFIG	= OPC_STATUS_FAILED + 1,
	//OPC_STATUS_SUSPENDED	= OPC_STATUS_NOCONFIG + 1,
	//OPC_STATUS_TEST	= OPC_STATUS_SUSPENDED + 1
    //}	OPCSERVERSTATE ;

    TL_AsNTService(lpOPCProgID);
	TL_SetServerState( OPC_STATUS_RUNNING);
	TL_SetMajorVersion(1);
	TL_SetMinorVersion(2); 
	TL_SetBuildNumber(3);
	TL_SetVendorInfo("TuoLin");
	TL_SetBandWidth(50);
}

void CTestSvrView::OnUpdateMenuSvrStatus(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->Enable (TRUE);
}

void CTestSvrView::OnUpdateMenuRegister(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	
}

void CTestSvrView::OnMenuRegister() 
{
	// TODO: Add your command handler code here
	if (OnRegister()){
		AfxMessageBox("Register Ok!");
	}
    else {
        AfxMessageBox("Register Fail!"); 
	}
	
}
void CTestSvrView::OnUpdateMenuUnRegister(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->Enable (TRUE);
}

void CTestSvrView::OnMenuUnRegister() 
{
	// TODO: Add your command handler code here
	if (OnUnRegister()){
		AfxMessageBox("Uninstall Register Ok!");
	}
    else {
        AfxMessageBox("Uninstall Register Fail!"); 
	}
}
 
void CTestSvrView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	CListCtrl& m_ListCtrl = GetListCtrl();
    iCurRow	=m_ListCtrl.HitTest(point, NULL);
	CListView::OnLButtonDown(nFlags, point);
}


BOOL CTestSvrView::AddItemToListCtrl()
{	//把最后加入的点放入ListCtrl中
	CTagName * pTagItem;
	CTime m_time;
    int iTagCounts =m_TagList.GetSize ();
	if (iTagCounts<=0) return FALSE;
    pTagItem=(CTagName *)m_TagList.GetAt (iTagCounts-1);
	CListCtrl& m_ListCtrl = GetListCtrl();
	char buf[50];
	LV_ITEM lvi;
	lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM; 
	lvi.iSubItem = 0;
	lvi.iImage = 0;
	
	strncpy (buf, pTagItem->m_sTagName, 50);
	lvi.pszText = buf;
	lvi.iItem = m_ListCtrl.GetItemCount() +1;
	lvi.lParam = (LPARAM) lvi.iItem;//存放第几项
	m_ListCtrl.InsertItem(&lvi);

	//fill ListCtrl
	 
    sprintf(buf,"0x%x",pTagItem->m_hHWND);
	m_ListCtrl.SetItemText (lvi.iItem -1,1,buf);    
	
	FormatVARIANTToString(pTagItem->m_vValue,buf);
	m_ListCtrl.SetItemText (lvi.iItem -1 ,2,buf);
    
	FormatTypeToString(pTagItem->m_vType, buf);
	m_ListCtrl.SetItemText (lvi.iItem -1 ,3,buf);
    FormatQualityToString(pTagItem->m_lQuality,buf);	
	m_ListCtrl.SetItemText (lvi.iItem -1 ,4,buf);
	
	m_time= CTime(pTagItem->m_ft);
	sprintf(buf,m_time.Format("%A, %B %d, %Y %H:%M:%S"));
	
	m_ListCtrl.SetItemText(lvi.iItem -1,5,buf);	
	strncpy (buf, pTagItem->m_sDescr, 50);
     m_ListCtrl.SetItemText (lvi.iItem -1 ,6,buf);
    return TRUE;
}
BOOL CTestSvrView::RemoveItemFromListCtrl(int iIndex)
{
	BOOL bResult;
	CListCtrl& m_ListCtrl = GetListCtrl();
	
	//从 0 开始
	int iItemCounts = m_ListCtrl.GetItemCount ();
	if ((iIndex >iItemCounts -1) || (iIndex <0))
	{ 
		AfxMessageBox("Error Range!");
		bResult=FALSE;
	} else {
		m_ListCtrl.DeleteItem (iIndex);	 
		bResult=TRUE;	   
	}
    return bResult;
}

BOOL CTestSvrView::UpdateArrayToListCtrl()
{
	CTagName * pTagItem;
	CTime m_time;
	int i;
	char buf[50];

    int iTagCounts =m_TagList.GetSize ();
    CListCtrl& m_ListCtrl = GetListCtrl();
	if (iTagCounts<=0) return FALSE;
    for (i= iRefreshIndex;(i<iTagCounts) &(i<iRefreshIndex +10);i++){		
		//取出指针
		pTagItem=(CTagName *)m_TagList.GetAt (i);		
		//刷新值
		FormatVARIANTToString(pTagItem->m_vValue,buf);
		m_ListCtrl.SetItemText (i ,2,buf);
		
		FormatQualityToString(pTagItem->m_lQuality,buf);	
		m_ListCtrl.SetItemText (i,4,buf);
		
		m_time= CTime(pTagItem->m_ft);
		sprintf(buf,m_time.Format("%A, %B %d, %Y %H:%M:%S"));
		
		m_ListCtrl.SetItemText(i,5,buf);	
		strncpy (buf, pTagItem->m_sDescr, 50);
		m_ListCtrl.SetItemText (i ,6,buf);
		
		OnUpdateItem(pTagItem); //修改到OPC中
	}
	//主要用于限定一次刷新的量(10)
	iRefreshIndex =i;
	if (iRefreshIndex >=iTagCounts) iRefreshIndex =0;
    
	return TRUE;
    
}

 

BOOL CTestSvrView::RandomDataToArray()
{
	CTagName * pTagItem;
	CTime m_time;
	int i;
 
    FILETIME ft;
	SYSTEMTIME sysTime;
	
	GetSystemTime(&sysTime);
	SystemTimeToFileTime(&sysTime,&ft);

	//GetSystemTimeAsFileTime(&ft);  

    int iTagCounts =m_TagList.GetSize ();
	if (iTagCounts<=0) return FALSE;
	for (i= iRefreshIndex;(i<iTagCounts) & (i<iRefreshIndex +10);i++){	
        //取出指针
		pTagItem=(CTagName *)m_TagList.GetAt (i);		
		//刷新值
        
       RandomVARIANT(&pTagItem->m_vValue);
	   RandomQuality(&pTagItem->m_lQuality);	
	   pTagItem->m_ft = ft;
		
	//	strncpy (buf, pTagItem->m_sDescr, 50);
		
	}
	return TRUE;
}


void CTestSvrView::OnAppExit() 
{
	int iclientcounts =TL_GetClientCounts();
	char buf[50];
	sprintf(buf,"Client Connect counts = %d,DisConnect?",iclientcounts );
	if (AfxMessageBox(buf,MB_YESNO|MB_ICONQUESTION)==IDYES){       
		//exit app;
        AfxGetMainWnd()->PostMessage(WM_CLOSE, 0, 0);	
	}
	
}

⌨️ 快捷键说明

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