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

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

?? tyopcclientdoc.cpp

?? OPC Client 源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// TYOPCClientDoc.cpp : implementation file
//

#include "stdafx.h"
#include "tyopcclient.h"
#include "TYOPCClientDoc.h"

#include "DlgOPCServerList.h"
#include "DlgOPCGroup.h"
#include "DlgOPCItemAdd.h"
#include "DlgOPCItemWrite.h"
#include "DlgModifyName.h"

#include "DlgOPCServerProperty.h"

#include "DlgPropertyOPCItem.h"

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

extern void LogMsg(UINT unEventID,CObject * pObject);


static	LPCTSTR lpszRegSection	= _T("Atuo Open File");
static	LPCTSTR lpszName	= _T("Name");
static	LPCTSTR lpszNameID	= _T("NameID");

/////////////////////////////////////////////////////////////////////////////
// CTYOPCClientDoc

IMPLEMENT_DYNCREATE(CTYOPCClientDoc, CDocument)

CTYOPCClientDoc::CTYOPCClientDoc()
{
	EnableAutomation();

	AfxOleLockApp();
	m_dwSelBranch=SEL_BRANCH_NULL;

	m_bAutoOpenFile=FALSE;
}


CTYOPCClientDoc::~CTYOPCClientDoc()
{
	AfxOleUnlockApp();

	CString strFileName=GetPathName ();

	if(strFileName.IsEmpty ())
		return;
	AfxGetApp ()->WriteProfileString(lpszRegSection, lpszName, strFileName.operator LPCTSTR());
	AfxGetApp ()->WriteProfileInt (lpszRegSection,lpszNameID, m_bAutoOpenFile);
}

void CTYOPCClientDoc::OnFinalRelease()
{
	// When the last reference for an automation object is released
	// OnFinalRelease is called.  The base class will automatically
	// deletes the object.  Add additional cleanup required for your
	// object before calling the base class.

	CDocument::OnFinalRelease();
}


BEGIN_MESSAGE_MAP(CTYOPCClientDoc, CDocument)
	//{{AFX_MSG_MAP(CTYOPCClientDoc)
	ON_COMMAND(ID_OPCREMPC_ADD, OnOPCRemPCAdd)
	ON_COMMAND(ID_OPCREMPC_DEL, OnOPCRemPCDel)
	ON_COMMAND(ID_OPCREMPC_PROPER, OnOPCRemPCProperty)
	ON_COMMAND(ID_OPCSERVER_ADD, OnOPCServerAdd)
	ON_COMMAND(ID_OPCSERVER_DEL, OnOPCServerDel)
	ON_COMMAND(ID_OPCSERVER_PROPER, OnOPCServerProperty)
	ON_COMMAND(ID_OPCGROUP_ADD, OnOPCGroupAdd)
	ON_COMMAND(ID_OPCGROUP_DEL, OnOPCGroupDel)
	ON_COMMAND(ID_OPCITEM_ADD, OnOPCItemAdd)
	ON_COMMAND(ID_OPCITEM_DEL, OnOPCItemDel)
	ON_COMMAND(ID_OPCITEM_ASYNC20_READ, OnOPCItemAsync20Read)
	ON_COMMAND(ID_OPCITEM_ASYNC20_REFRESH_CACHE, OnOPCItemAsync20RefreshCache)
	ON_COMMAND(ID_OPCITEM_ASYNC20_REFRESH_DEVICE, OnOPCItemAsync20RefreshDevice)
	ON_COMMAND(ID_OPCITEM_ASYNC20_WRITE, OnOPCItemAsync20Write)
	ON_COMMAND(ID_OPCITEM_SET_ACTIVE, OnOPCItemSetActive)
	ON_COMMAND(ID_OPCITEM_SET_INACTIVE, OnOPCItemSetInactive)
	ON_COMMAND(ID_OPCGROUP_PROPER, OnOPCGroupProperty)
	ON_COMMAND(ID_FILE_PRINT, OnFilePrint)
	ON_COMMAND(ID_AUTO_OPENFILE, OnAutoOpenFile)
	ON_UPDATE_COMMAND_UI(ID_AUTO_OPENFILE, OnUpdateAutoOpenFile)
	ON_COMMAND(ID_OPCITEM_PROPER, OnOPCGroupProperty)
	//}}AFX_MSG_MAP
	ON_UPDATE_COMMAND_UI_RANGE (ID_OPC_MSG_BEGIN, ID_OPC_MSG_END, OnUpdateCmdUI)

END_MESSAGE_MAP()

BEGIN_DISPATCH_MAP(CTYOPCClientDoc, CDocument)
	//{{AFX_DISPATCH_MAP(CTYOPCClientDoc)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_DISPATCH_MAP
END_DISPATCH_MAP()

// Note: we add support for IID_ITYOPCClientDoc to support typesafe binding
//  from VBA.  This IID must match the GUID that is attached to the 
//  dispinterface in the .ODL file.

// {DE64F505-0EAC-4920-8FAA-BA75AFF94DAB}
static const IID IID_ITYOPCClientDoc =
{ 0xde64f505, 0xeac, 0x4920, { 0x8f, 0xaa, 0xba, 0x75, 0xaf, 0xf9, 0x4d, 0xab } };

BEGIN_INTERFACE_MAP(CTYOPCClientDoc, CDocument)
	INTERFACE_PART(CTYOPCClientDoc, IID_ITYOPCClientDoc, Dispatch)
END_INTERFACE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTYOPCClientDoc diagnostics

#ifdef _DEBUG
void CTYOPCClientDoc::AssertValid() const
{
	CDocument::AssertValid();
}

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

BOOL CTYOPCClientDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;

	// TODO: add reinitialization code here
	// (SDI documents will reuse this document)
	UpdateAllViews (NULL, HINT_NEW_DOCUMENT, NULL);	
	m_dwSelBranch=SEL_BRANCH_NULL;
	m_cOPCMgt.DelAll();
	
	return TRUE;
}



/////////////////////////////////////////////////////////////////////////////
// CTYOPCClientDoc serialization

void CTYOPCClientDoc::Serialize(CArchive& ar)
{
	//
	if (ar.IsStoring())
	{
		// TODO: add storing code here
	}
	else
	{
		CString strFileName=ar.GetFile()->GetFilePath ();
		CString strTip;
//		strTip.Format ("打開加載文件<%s>",this->GetPathName ());
		strTip.Format ("打開加載文件<%s>",strFileName);
		LogMsg(HINT_LOAD_PROJECT,(CObject *)&strTip);

		// 打開文件------關閉舊文件
		UpdateAllViews (NULL, HINT_OPEN_DOCUMENT, NULL);	
		m_dwSelBranch=SEL_BRANCH_NULL;
		m_cOPCMgt.DelAll();

	}
	m_cOPCMgt.Serialize (ar);


}

/////////////////////////////////////////////////////////////////////////////
// CTYOPCClientDoc commands
/////////////////////////////////////////////////////////////////////////////
// CTYOPCClientDoc commands

//選擇OPC服務器
void CTYOPCClientDoc::OnOPCServerConnect() 
{
	// TODO: Add your command handler code here
	m_cOPCMgt.GetSelOPCServer ()->Connect ();

	SetModifiedFlag (TRUE);
}

void CTYOPCClientDoc::SetSelOPC(COPCRemoteMachine* pOPCRM,COPCServer *pOPCServer,COPCGroup* pOPCGroup)
{
//	if(m_cOPCMgt.GetSelOPCGroup ()!=pOPCGroup)
//		UpdateAllViews (NULL,HINT_GROUP_SELECT,(CObject*)pOPCGroup);

	m_cOPCMgt.SetSelOPC(pOPCRM,pOPCServer,pOPCGroup);
}

void CTYOPCClientDoc::SetSelOPCItem(CStringArray& strSelOPCItem)
{
	m_strSelOPCItem.RemoveAll ();
	m_strSelOPCItem.Append (strSelOPCItem);
}
//*
void CTYOPCClientDoc::OnOPCServerAdd() 
{
	//調用OPCServer列表
	CDlgOPCServerList Dlg;

	Dlg.SetOPCBrowse (&m_cOPCMgt);

	if(IDOK==Dlg.DoModal ())
	{	//得到OPC服務器
//		CString strProgID=Dlg.m_strProgID;//Takebishi.Modbus.1
//調試
//		strProgID="Takebishi.Modbus.1";

//		CString strRemotePCName=Dlg.m_strRemotePCName;
//		strRemotePCName=LOACAL_PC_NAME;
		BeginWaitCursor();

		COPCServer* pOPCServer=new COPCServer;
		
		//OPC SERVER PC
		pOPCServer->m_strRemoteMachine =Dlg.m_strRemPC ;
		pOPCServer->m_strRemoteIP=Dlg.m_strIPAddr ;
		//OPC SERVER PROGID
		pOPCServer->m_strProgID=Dlg.m_strProgID;
		//OPC SERVER NAME
		pOPCServer->m_strName =Dlg.m_strOPCServerName ;
		//OPC SERVER VERSION
		pOPCServer->m_unOPCVersion =Dlg.m_unOPCVersion ;

		//檢查是否已經存在遠程計算機
		COPCRemoteMachine* pRemPC=NULL;
		if(!m_cOPCMgt.IsBeingRemPC (pOPCServer->m_strRemoteMachine,pRemPC))
		{
			pRemPC=new COPCRemoteMachine;
			pRemPC->AddOPCServer (pOPCServer);
			//OPC SERVER PC IP ADDRESS
			pRemPC->SetIPAddr (Dlg.m_strIPAddr); 
			pRemPC->SetName  (Dlg.m_strRemPC); 
			
			m_cOPCMgt.AddOPCRemPC (pRemPC);
			//更新視
			this->UpdateAllViews (NULL,HINT_REMPC_ADD,(CObject*)pRemPC);
		}
		else
		{
			pRemPC->AddOPCServer (pOPCServer);
		}

		//連接 OPC Server
		pOPCServer->Connect ();

		//更新視
		this->UpdateAllViews (NULL,HINT_SERVER_ADD,(CObject*)pOPCServer);

		//
		EndWaitCursor();

		SetModifiedFlag (TRUE);
	}
}
//*/
void CTYOPCClientDoc::OnOPCGroupAdd() 
{
	// TODO: Add your command handler code here
	// interface:
	CDlgOPCGroup dlg(m_cOPCMgt.GetSelOPCServer ());

	if (dlg.DoModal () == IDOK)
	{
		BeginWaitCursor();

		COPCServer* pOPCServer=m_cOPCMgt.GetSelOPCServer ();

		CString	strGroupName;
		FLOAT	fDeadband;
		DWORD	dwLanguageID;
		DWORD	dwUpdateRate;
		long	lTimeBias;
		BOOL	bActive;

		strGroupName=dlg.GetOPCGroupName ();
		dlg.GetOPCGroupState(
			dwUpdateRate,
			bActive,
			lTimeBias,
			fDeadband,
			dwLanguageID);

		int nAddOK=pOPCServer->AddGroup(
			strGroupName,
			lTimeBias,			//時差(時間差)
			fDeadband,			//死區(百分數表示)
			dwUpdateRate,		//更新速率
			dwLanguageID,		//語言
			bActive				//是否活動狀態
			);

		//更新相關視圖
		this->UpdateAllViews (NULL,HINT_GROUP_ADD,(CObject*)pOPCServer->GetSelGroup ());
		//
		EndWaitCursor();

		SetModifiedFlag (TRUE);

	}
	
}


void CTYOPCClientDoc::OnOPCGroupProperty() 
{
	// TODO: Add your command handler code here
	CDlgOPCGroup dlg(m_cOPCMgt.GetSelOPCServer ());
	COPCGroup* pGroup=m_cOPCMgt.GetSelOPCGroup ();
	ASSERT(pGroup);

	//設定標題
	dlg.SetCaption (_T("組屬性"));

	//設定組名
	dlg.SetOPCGroupName (pGroup->GetName ());

	//設定組狀態
	dlg.SetOPCGroupState(
		pGroup->GetUpdateRate (),	//更新速率
		pGroup->IsActive (),		//是否活動狀態
		pGroup->GetTimeBias (),		//時差(時間差)
		pGroup->GetDeadband (),		//死區(百分數表示)
		pGroup->GetLanguageID ());	//語言

	if (dlg.DoModal () == IDOK)
	{
		CString	strGroupName;
		FLOAT	fDeadband;
		DWORD	dwLanguageID;
		DWORD	dwUpdateRate;
		long	lTimeBias;
		BOOL	bActive;

		//等待處理...
		BeginWaitCursor();

		strGroupName=dlg.GetOPCGroupName ();

		if(strGroupName!=pGroup->GetName ())
		{
			pGroup->SetName(strGroupName);
			//通知樹視刷新
			UpdateAllViews (NULL, HINT_GROUP_RENAME, (CObject *)&strGroupName);
		}
		//
		DWORD* pUpdateRate=NULL;
		LONG* pTimeBias=NULL;
		FLOAT* pDeadband=NULL;
		BOOL* pActive=NULL;

		strGroupName=dlg.GetOPCGroupName ();
		dlg.GetOPCGroupState(
			dwUpdateRate,
			bActive,
			lTimeBias,
			fDeadband,
			dwLanguageID);

		if(dwUpdateRate!=pGroup->GetUpdateRate ())
			pUpdateRate=&dwUpdateRate;
		if(lTimeBias!=pGroup->GetTimeBias ())
			pTimeBias=&lTimeBias;
		if(fDeadband!=pGroup->GetDeadband ())
			pDeadband=&fDeadband;
		if(bActive!=pGroup->IsActive ())
			pActive=&bActive;

		if(pUpdateRate
			||pTimeBias
			||pDeadband
			||pActive)
		{
			pGroup->SetState (pUpdateRate,
							pActive,
							pTimeBias,
							pDeadband
							);
			//通知樹視刷新
			UpdateAllViews (NULL, HINT_GROUP_SET_STATE, (CObject *)pGroup);
		}

		//處理結束
		EndWaitCursor();

		SetModifiedFlag (TRUE);

	}


}

void CTYOPCClientDoc::OnOPCItemAdd() 
{
	// TODO: Add your command handler code here
	COPCGroup* pSelGroup=NULL;

	// Get pointer to server that selected group belongs to:
//	COPCServer *pServer = pSelGroup->GetParentServer ();
//	ASSERT (pServer != NULL);
	
	//調試使用
	if(NULL==m_cOPCMgt.GetSelOPCGroup())
		m_cOPCMgt.AddOPCGroup("opc01",TRUE);


	// Create an item add dialog.  Pass it a pointer to the group object
	// items are to be added to, and the associated OPC Server's browser
	// interface:
	CDlgOPCItemAdd dlg (m_cOPCMgt.GetSelOPCServer ());

	// Show as modal dialog.  If user hits "OK", we need to add items to 
	// project:
	if (dlg.DoModal () == IDOK)
		{
		//等待處理...
		BeginWaitCursor();

		//得到新增加的數據項
		CObArray* pAddItems=dlg.GetAddItems();

		COPCGroup * pGroup=m_cOPCMgt.GetSelOPCServer ()->GetSelGroup();
		ASSERT(pGroup);
		pGroup->AddItem(pAddItems);
		//處理結束
		EndWaitCursor();

		UpdateAllViews (NULL, HINT_ITEM_ADD, pAddItems);

		SetModifiedFlag (TRUE);
		//
/*		// Get the number of items to add specified in dialog:
		int cnItems = dlg.GetItemCount ();

		// If number of items is non-zero, then add them to project:
		if (cnItems > 0)
			{
			// Get an object array containing the list of items to be added:
			CObArray &cList = dlg.GetItemList ();

			// If the number of items is large, then use a worker thread
			// to add them:
			if (cnItems > LARGE_ADDITEM_COUNT)
				{
				// Update status bar to indicate that we are adding items:
				CKStatusBarText cText (IDS_ADDING_ITEMS);

				// Create and fill a structure to pass to worker thread that
				// contains the items to add and specifies the "add items" task:
				WORKERTHREADARG tArg;
				tArg.eTask = WORKERTHREADARG::ADD_ITEMS;
				tArg.pvObjectA = (void *)&cList;
				tArg.pvObjectB = (void *)&cnItems;

				// Run a worker thread to add the items:
				RunWorkerThread (&tArg);
				}

			// Else if number of items is small, add them directly:
			else
				pGroup->AddItems (cList, cnItems);
			
			// Notify all views that item has been added:
			UpdateAllViews (NULL, HINT_ITEM_ADD, &cList);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本电影欧美片| 日韩av一级电影| 久久久影视传媒| 精品日韩99亚洲| 欧美一二三四在线| 精品国产露脸精彩对白| 精品国产免费人成电影在线观看四季| 777奇米四色成人影色区| 欧美肥妇free| 欧美sm美女调教| 国产女人18水真多18精品一级做| 久久久国际精品| 成人欧美一区二区三区| 一区二区三区四区在线免费观看| 亚洲一区二区三区四区在线| 日韩不卡手机在线v区| 久99久精品视频免费观看| 国产在线一区二区综合免费视频| 国产精品一区二区在线看| 成人夜色视频网站在线观看| 91美女视频网站| 欧美色倩网站大全免费| 精品久久久久久久久久久久包黑料| 26uuu久久综合| 亚洲人成影院在线观看| 日本欧洲一区二区| 岛国精品一区二区| 欧美精品视频www在线观看 | 中文字幕欧美一区| 亚洲一区在线观看免费观看电影高清| 无吗不卡中文字幕| 国产a区久久久| 欧美日韩视频专区在线播放| 久久亚洲精品小早川怜子| 亚洲欧美综合色| 男人的天堂久久精品| 成人午夜视频在线观看| 欧美美女网站色| 国产精品美女久久久久久久| 日韩激情视频网站| 成人免费视频视频| 欧美电视剧免费观看| 亚洲裸体xxx| 激情六月婷婷综合| 欧美日韩激情一区二区| 国产精品久久久久永久免费观看 | 中文字幕在线一区| 六月婷婷色综合| 在线观看不卡一区| 亚洲国产高清在线观看视频| 免费观看在线综合| 欧美体内she精高潮| 国产精品女同互慰在线看| 青青草国产精品亚洲专区无| 91社区在线播放| 中文字幕av一区二区三区高| 免费三级欧美电影| 欧美年轻男男videosbes| 亚洲日本中文字幕区| 粉嫩嫩av羞羞动漫久久久| 日韩精品一区二区三区四区 | 美女视频一区在线观看| 欧美最猛黑人xxxxx猛交| 国产精品萝li| 成人看片黄a免费看在线| 国产日韩欧美a| 国产精品亚洲成人| 国产午夜精品一区二区| 久久精品免费观看| 精品国产一区二区三区av性色| 首页综合国产亚洲丝袜| 欧美亚洲一区三区| 亚洲国产裸拍裸体视频在线观看乱了 | 亚洲欧美成aⅴ人在线观看| 国产剧情一区在线| 国产亚洲精品bt天堂精选| 国产乱码字幕精品高清av| 26uuu久久天堂性欧美| 国产一区二区视频在线播放| 久久久午夜电影| 大桥未久av一区二区三区中文| 久久精品视频一区二区| 东方欧美亚洲色图在线| 亚洲欧洲精品一区二区三区不卡| 不卡欧美aaaaa| 一区二区三区在线免费视频| 色欧美片视频在线观看| 亚洲va国产天堂va久久en| 欧美一二三四在线| 成人一级视频在线观看| 一区二区三区四区中文字幕| 欧美日韩综合不卡| 奇米888四色在线精品| 久久亚洲精华国产精华液| 国产成人日日夜夜| 亚洲在线视频网站| 精品噜噜噜噜久久久久久久久试看 | 欧美情侣在线播放| 激情综合一区二区三区| 日本一区二区三区高清不卡| 91在线你懂得| 日韩av午夜在线观看| 欧美国产精品中文字幕| 日本道免费精品一区二区三区| 欧美96一区二区免费视频| 国产视频一区在线播放| 一本色道久久综合亚洲91| 日本午夜一区二区| 国产精品欧美久久久久一区二区 | 欧美aaaaaa午夜精品| 中文字幕精品一区二区精品绿巨人 | 99国产精品久久久久久久久久 | 精品一区二区精品| 亚洲欧美另类久久久精品| 日韩精品专区在线影院重磅| 91小视频免费看| 麻豆一区二区在线| 亚洲综合在线免费观看| 久久精品视频一区| 日韩一级免费观看| 日本精品免费观看高清观看| 国精产品一区一区三区mba桃花| 亚洲黄色免费电影| 国产女人18毛片水真多成人如厕| 欧美日韩dvd在线观看| 99精品久久99久久久久| 久久9热精品视频| 日本中文在线一区| 一区二区三区在线影院| 亚洲国产高清不卡| 久久综合精品国产一区二区三区| 欧美三级三级三级| 91麻豆精东视频| 成人av在线一区二区| 精品综合久久久久久8888| 亚洲r级在线视频| 一区二区免费在线播放| 国产精品成人一区二区艾草 | 日韩三级在线免费观看| 欧美三级日韩在线| 欧美网站大全在线观看| 91在线一区二区| av一区二区三区黑人| 成人性生交大片免费看视频在线| 久久国产生活片100| 美女视频免费一区| 蜜臀av一区二区| 韩国视频一区二区| 精品一区二区三区久久久| 久久99热这里只有精品| 麻豆91在线播放免费| 热久久久久久久| 精品一区二区免费| 国产成人高清在线| av在线播放不卡| 在线观看视频欧美| 欧美亚洲综合久久| 欧美喷潮久久久xxxxx| 精品视频一区 二区 三区| 欧美色大人视频| 91精品国产丝袜白色高跟鞋| 日韩欧美国产三级| 国产午夜精品一区二区三区四区| 久久午夜国产精品| 中文文精品字幕一区二区| 国产精品久久久久久久午夜片| 国产亚洲精品免费| 樱花草国产18久久久久| 亚洲成av人综合在线观看| 免费av网站大全久久| 黑人巨大精品欧美黑白配亚洲| 国产91丝袜在线播放九色| 9色porny自拍视频一区二区| 欧美自拍偷拍午夜视频| 日韩一区二区三区免费观看| 久久亚洲春色中文字幕久久久| 国产日产欧美一区| 樱花草国产18久久久久| 久久成人久久爱| 91丨九色丨蝌蚪富婆spa| 欧美日韩国产一二三| 亚洲精品一区二区三区香蕉| 综合网在线视频| 美腿丝袜一区二区三区| va亚洲va日韩不卡在线观看| 欧美日韩不卡一区二区| 欧美经典一区二区三区| 亚洲午夜精品久久久久久久久| 精品在线一区二区三区| 色先锋资源久久综合| 精品久久久三级丝袜| 亚洲综合色区另类av| 国产一区二区三区四区在线观看| 91成人网在线| 中文在线免费一区三区高中清不卡| 五月婷婷久久丁香| 99国产麻豆精品| 欧美国产日韩a欧美在线观看| 亚洲国产成人91porn| 成人高清视频免费观看|