亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? serverinfoview.cpp

?? 一個OPC客戶端監視程序
?? CPP
字號:
// ServerInfoView.cpp : implementation file
//

#include "stdafx.h"
#include "OpcClientSpy.h"
#include "ServerInfoView.h"
#include "MainFrm.h"
#include "GroupParamsDlg.h"
#include "ServerStatus.h"
#include "TopSplitView.h"
#include "ValueMsgView.h"

#include <winsock2.h>

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

extern const CLSID CLSID_OPCServerList = {0x13486D51,0x4821,0x11D2,{0xA4,0x94,0x3C,0xB3,0x06,0xC1,0x00,0x00}};
#define __GUID_DEFINED__
#include "OPCDa_Cats.c"

/////////////////////////////////////////////////////////////////////////////
// CServerInfoView

IMPLEMENT_DYNCREATE(CServerInfoView, CFormView)

CServerInfoView::CServerInfoView()
	: CFormView(CServerInfoView::IDD)
{
	//{{AFX_DATA_INIT(CServerInfoView)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	m_pImageList = NULL;

	groupHandle = 0;
	dwConnection1 = 0;
	dwConnection2 = 0;
	testSink = new CAdviseSink;   // create the advise sink for notifications
	testSink->AddRef();

	callbackCP = new OPCCallbackObject;   // create the ConnectionPoint for notifications
	callbackCP->AddRef();
	shutdownCP = new OPCShutdownObject;   // create the ConnectionPoint for notifications
	shutdownCP->AddRef();
	dwShutdownConnection = 0;
	usingCP = FALSE;

	AfxOleLockApp();
	// Everyone can connect back to IAdviseSink
	HRESULT hr = CoInitializeSecurity(NULL, -1, NULL, NULL,
		RPC_C_AUTHN_LEVEL_NONE, RPC_C_IMP_LEVEL_IDENTIFY, NULL, EOAC_NONE, NULL);
	if (FAILED(hr))
		TRACE(_T("CoInitializeSecurity failed, %lx"), hr);
}

CServerInfoView::~CServerInfoView()
{
	if( m_pImageList )
		delete m_pImageList;
	ReleaseAllResource();
	//opc 操作。
	AfxOleUnlockApp();
   if( opcServer.IsOk() )
      DisconnectOPCServer(FALSE);
   testSink->Release(); // OLE should clean this up, but may not have time!
   callbackCP->Release();
   shutdownCP->Release();
   Sleep( 100 );
}

void CServerInfoView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CServerInfoView)
	DDX_Control(pDX, IDC_TREE_SERVER, m_server);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CServerInfoView, CFormView)
	//{{AFX_MSG_MAP(CServerInfoView)
	ON_WM_SIZE()
	ON_WM_CONTEXTMENU()
	ON_COMMAND(IDV_NET_INFO, OnNetInfo)
	ON_COMMAND(IDT_SERVER_CON, OnServerCon)
	ON_UPDATE_COMMAND_UI(IDT_SERVER_CON, OnUpdateServerCon)
	ON_NOTIFY(TVN_SELCHANGED, IDC_TREE_SERVER, OnSelchangedTreeServer)
	ON_COMMAND(IDT_SERVER_INTERUPT, OnServerInterupt)
	ON_UPDATE_COMMAND_UI(IDT_SERVER_INTERUPT, OnUpdateServerInterupt)
	ON_COMMAND(IDT_GROUP_PARA, OnGroupPara)
	ON_UPDATE_COMMAND_UI(IDT_GROUP_PARA, OnUpdateGroupPara)
	ON_COMMAND(IDT_SERVER_STATUS, OnServerStatus)
	ON_UPDATE_COMMAND_UI(IDT_SERVER_STATUS, OnUpdateServerStatus)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CServerInfoView diagnostics

#ifdef _DEBUG
void CServerInfoView::AssertValid() const
{
	CFormView::AssertValid();
}

void CServerInfoView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}
#endif //_DEBUG



void CServerInfoView::OnInitialUpdate() 
{
	CFormView::OnInitialUpdate();
	//本機節點名。GetComputerName也可以實現
	WORD wVersionRequested = MAKEWORD( 2, 2 );
	WSADATA wsaData;
	if ( WSAStartup( wVersionRequested, &wsaData ) == 0 ) {
		/* Tell the user that we could not find a usable  WinSock DLL. */
 		if( gethostname((char far *)LPCTSTR(m_strLocalName),256)==SOCKET_ERROR )
			MessageBox("無法使用WS2_32.LIB");
		WSACleanup( );
	}
	//找到信息指示列表框
	GetInfoFormView();
	//other
	m_bHaveOPCConnected = FALSE;
	/*//刪除所有舊的。為New而做
	m_server.DeleteAllItems();
	//裝入圖標,并初始化
	InitRootInfo();	*/
	OnNetInfo();
}


//是否已經存在.TRUE=已經存在
BOOL  CServerInfoView::FindThisCLSID(CString node,CLSID clsid)
{
	BOOL bRtn = FALSE;
   POSITION pos = m_vServers.GetHeadPosition();
   while( pos )
   {
      OPCServerInfo* pServerInfo = m_vServers.GetNext(pos);
	  if( (pServerInfo->m_clsid == clsid)&&
		  (pServerInfo->m_nodeName==node) )
	  {
		  bRtn = TRUE;
		  break;
	  }
   }
   return bRtn;
}


//釋放所有資源
void  CServerInfoView::ReleaseAllResource(void)
{
   POSITION pos = m_vServers.GetHeadPosition();
   while( pos )
   {
		OPCServerInfo* pServerInfo = m_vServers.GetNext( pos );
		delete pServerInfo;
   }
}

//通過父窗口找到信息顯示列表框.
CInfoFormView *CServerInfoView::GetInfoFormView()
{
	CMainFrame *pMainFrame = (CMainFrame *)AfxGetApp()->m_pMainWnd;
	m_pInfoForm = (CInfoFormView *)(pMainFrame->m_wndSplitter.GetPane(1,0));
	return m_pInfoForm;
}


//彈出式菜單。
void CServerInfoView::OnContextMenu(CWnd* pWnd, CPoint point) 
{
   CMenu popMenu;

   if( popMenu.LoadMenu(IDR_MENU_TREE) )
   {
      popMenu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
                                             point.x,point.y,
                                             AfxGetMainWnd());
   }	
}

//列出網絡中所有的OPC服務器
void CServerInfoView::OnNetInfo() 
{
	//刪除所有舊的。
	m_server.DeleteAllItems();
	//裝入圖標,并初始化
	InitRootInfo();	
	//清除隊列
	ReleaseAllResource();
	m_strNodeList.RemoveAll();
	CWaitCursor wait;
	//GetOPCServers20((char*)LPCTSTR(m_strLocalName),CATID_OPCDAServer10);
	//GetOPCServers20((char*)LPCTSTR(m_strLocalName),CATID_OPCDAServer20);
	GetOPCServers10((char*)LPCTSTR(m_strLocalName));
	//GetOPCServers20("P2",CATID_OPCDAServer10);
	//GetOPCServers20("P2",CATID_OPCDAServer20);
	//GetOPCServers10("P2");
/*	EnumerateNodes(NULL);
	POSITION pos = m_strNodeList.GetHeadPosition();
	while( pos )
	{
		CString strNode = m_strNodeList.GetNext(pos);
		if( strNode.GetLength()>=7 ) //加快調試速度.
			continue;
		if( strNode.CompareNoCase("P3")==0 )//skip p3(以為連接P3時有問題).
			continue;
		GetOPCServers20((char *)LPCTSTR(strNode),CATID_OPCDAServer10);
		GetOPCServers20((char *)LPCTSTR(strNode),CATID_OPCDAServer20);
		GetOPCServers10((char *)LPCTSTR(strNode));
	}*/
	HTREEITEM hItem[] = {m_hRoot1,m_hLocalDA1,m_hLocalDA2,
		m_hRoot2,m_hRemoteDA1,m_hRemoteDA2};
	for( int i=0;i<6;i++ )
		m_server.Expand(hItem[i],TVE_EXPAND);
}

//連接當前的OPC服務器
void CServerInfoView::OnServerCon() 
{
	OPCServerInfo *pServer = GetSelectedServerInfo();
	if( pServer!=NULL )
	{
		if( ConnectOPCServer(pServer)==FALSE )
			return;
		SetConnectPoint();//創建組等
		m_pInfoForm->ShowInfoToList(GANTANHAO,2,pServer->m_ProgID+" 已經啟動。");
	}
}

//該菜單是否有效。
void CServerInfoView::OnUpdateServerCon(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(!m_bHaveOPCConnected);	
}

void CServerInfoView::OnSelchangedTreeServer(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
		
	*pResult = 0;
}

//斷開服務器
void CServerInfoView::OnServerInterupt() 
{
	DisconnectOPCServer(TRUE);
}

//斷開OPC服務器.
void CServerInfoView::DisconnectOPCServer(BOOL bDeleteList) 
{
   CWaitCursor wait;
   HRESULT hr = S_OK;
   if( opcServer.IsOk() && opcGroup.IsOk() )
   {
      if( dwShutdownConnection )
         hr = AtlUnadvise( opcServer,IID_IOPCShutdown, dwShutdownConnection );
      if( usingCP )
      {// OPC 2.0 ConnectionPoints
         hr = AtlUnadvise( opcGroup,IID_IOPCDataCallback, dwConnection1 );
      }
      else
      {
		// call IDataObject::DUnadvise to turn off data notification          
		  DataObject dataObject;
		  HRESULT hr = dataObject.Attach( opcGroup );
          if( SUCCEEDED(hr) )
          {
             if( dwConnection1 )
                hr = dataObject.DUnadvise(dwConnection1);
             if( dwConnection2 )
                hr = dataObject.DUnadvise(dwConnection2);
             dataObject.Detach();
          }
       }
       opcServer.RemoveGroup(groupHandle, FALSE);
   }
   opcGroup.Detach();
   opcServer.Detach();

	Sleep( 100 );
	//刪除所有的
	if( bDeleteList==TRUE )
	{
		CMainFrame *pMainFrame = (CMainFrame *)AfxGetApp()->m_pMainWnd;
		CTopSplitView *pView = (CTopSplitView *)pMainFrame->m_wndSplitter.GetPane(0, 0); 
		CValueMsgView *pMsg = (CValueMsgView *)pView->m_leftRightSplitter.GetPane(0,1);
		pMsg->DeleteAllItem();
		m_bHaveOPCConnected = FALSE;
		m_pInfoForm->ShowInfoToList(GANTANHAO,2,"當前服務器已經斷開。");
	}
}

void CServerInfoView::OnUpdateServerInterupt(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(m_bHaveOPCConnected);	
}

void CServerInfoView::OnGroupPara() 
{
	if( !opcGroup.IsOk() )
		return;
   CGroupParamsDlg para( opcGroup );
   para.DoModal();
}

void CServerInfoView::OnUpdateGroupPara(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(m_bHaveOPCConnected);	
}

//server status
void CServerInfoView::OnServerStatus() 
{
   ASSERT( opcServer.IsOk() );
   CServerStatus dlg(opcServer);
   dlg.DoModal();
}

void CServerInfoView::OnUpdateServerStatus(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(m_bHaveOPCConnected);	
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕精品综合| 蜜桃一区二区三区四区| 轻轻草成人在线| 成人av网址在线| 欧美成人伊人久久综合网| 亚洲免费av观看| 国产黄色精品网站| 欧美一卡二卡在线观看| 亚洲欧美偷拍三级| 国产不卡视频在线播放| 日韩一区二区三区电影在线观看| 亚洲精品亚洲人成人网| 粉嫩嫩av羞羞动漫久久久| 精品少妇一区二区三区| 日韩专区一卡二卡| 日本久久一区二区三区| 中文字幕一区二区三区在线不卡| 精品一区在线看| 日韩欧美久久一区| 日本麻豆一区二区三区视频| 欧美三区免费完整视频在线观看| 国产精品欧美久久久久一区二区| 国产一区二区视频在线| 日韩精品一区国产麻豆| 日韩精品福利网| 欧美老肥妇做.爰bbww| 一区精品在线播放| 99麻豆久久久国产精品免费| 欧美国产日韩a欧美在线观看| 精品亚洲porn| 精品国精品国产尤物美女| 麻豆国产精品官网| 精品国精品国产| 国产一区视频在线看| 精品卡一卡二卡三卡四在线| 看国产成人h片视频| 欧美一级精品大片| 久久99精品久久久久婷婷| 日韩精品自拍偷拍| 韩国三级电影一区二区| 久久综合网色—综合色88| 国产一区在线不卡| 国产精品蜜臀在线观看| 91色在线porny| 亚洲gay无套男同| 91精品国产一区二区三区香蕉| 日韩av中文字幕一区二区| 欧美成人乱码一区二区三区| 国产精品一线二线三线精华| 中文字幕在线观看不卡| 日本乱人伦aⅴ精品| 日韩和欧美的一区| 2022国产精品视频| 成人av电影在线观看| 亚洲国产另类av| 欧美大片日本大片免费观看| 国产精品66部| 一区二区三区四区av| 日韩一级二级三级| 成人性生交大片免费看在线播放 | 亚洲欧美日韩一区| 欧美日韩一级二级三级| 九九精品一区二区| 国产精品美女www爽爽爽| 欧美日韩在线播| 国产乱子轮精品视频| 亚洲欧洲成人自拍| 这里只有精品99re| 成人av在线资源| 天堂va蜜桃一区二区三区漫画版| 久久众筹精品私拍模特| 一本一本久久a久久精品综合麻豆| 日韩中文字幕不卡| 国产精品的网站| 欧美一区二区精品| www.久久精品| 黄色日韩网站视频| 亚洲国产精品欧美一二99 | 欧美日韩mp4| 国产成人超碰人人澡人人澡| 亚洲黄色av一区| 久久综合色婷婷| 欧美日韩精品三区| 国产91精品久久久久久久网曝门 | 国产91丝袜在线播放| 亚洲第一久久影院| 国产精品久久久久久亚洲毛片| 欧美一区二区视频观看视频| av电影天堂一区二区在线| 久久99精品久久久久久久久久久久| 一区二区三区四区蜜桃| 国产精品乱人伦| 亚洲精品在线观看网站| 欧美日韩国产三级| 91久久久免费一区二区| 成人精品鲁一区一区二区| 黑人巨大精品欧美一区| 日本不卡视频在线观看| 亚洲一区二区三区爽爽爽爽爽| 中文字幕在线一区免费| 久久久www免费人成精品| 欧美一区2区视频在线观看| 欧美色精品天天在线观看视频| 91视视频在线直接观看在线看网页在线看 | 欧美日本在线播放| 色视频一区二区| 91网站在线播放| proumb性欧美在线观看| 国产传媒一区在线| 国产69精品久久久久777| 黑人精品欧美一区二区蜜桃 | 91在线精品一区二区| 成人精品一区二区三区中文字幕| 国产专区欧美精品| 精品中文字幕一区二区| 国产制服丝袜一区| 国产一区二区在线观看免费 | 在线观看日韩一区| 欧美性生活影院| 欧美日韩成人在线一区| 91精品国产日韩91久久久久久| 日韩一区二区三区视频在线观看| 欧美一区二区高清| 久久亚洲精品小早川怜子| 国产日韩影视精品| 欧美国产激情一区二区三区蜜月| 欧美激情一区二区三区四区| 国产精品久久午夜| 一区二区三区蜜桃| 日韩 欧美一区二区三区| 精品亚洲porn| 成人黄色小视频在线观看| 91捆绑美女网站| 欧美精品丝袜中出| 精品福利二区三区| 国产日产欧美一区二区视频| 最新热久久免费视频| 亚洲综合色区另类av| 日韩成人一级片| 国产成人啪午夜精品网站男同| 成人av电影免费观看| 欧美午夜在线一二页| 欧美一区二区二区| 中文字幕不卡的av| 夜夜嗨av一区二区三区四季av| 日韩av成人高清| 丁香激情综合五月| 欧美欧美欧美欧美首页| 2023国产精品自拍| 一区二区三区不卡在线观看| 久久99精品久久久久久动态图| 成人免费看黄yyy456| 欧美精品一二三区| 国产精品福利一区二区三区| 五月天激情综合| 懂色av一区二区三区免费看| 欧美视频精品在线| 国产亚洲精品久| 首页综合国产亚洲丝袜| 懂色中文一区二区在线播放| 欧美精品 国产精品| 中文字幕一区二区三区不卡| 日本一区中文字幕| 一本色道久久综合精品竹菊| 久久综合久久综合久久| 亚洲综合久久久久| 成人毛片视频在线观看| 日韩欧美一级二级三级| 一级日本不卡的影视| 国产精品99久久久久久有的能看| 欧美久久久久久久久| 亚洲桃色在线一区| 国产成人精品免费视频网站| 欧美一区二区三区公司| 亚洲综合激情另类小说区| 国产**成人网毛片九色| 精品剧情v国产在线观看在线| 亚洲午夜一区二区| 色综合 综合色| 中文字幕av不卡| 国产精品羞羞答答xxdd| 日韩欧美一二区| 日韩高清不卡一区二区| 欧美在线小视频| 亚洲欧美一区二区久久| 成人免费视频caoporn| 久久五月婷婷丁香社区| 九九久久精品视频| 日韩一区二区三区免费观看| 轻轻草成人在线| 91麻豆精品久久久久蜜臀| 亚洲午夜免费电影| 欧洲亚洲国产日韩| 一区二区三区视频在线看| 色婷婷av一区二区三区软件 | 国产精品久久久久影院色老大| 国产69精品久久99不卡| 久久人人超碰精品| 国产麻豆精品theporn| 国产日韩综合av|