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

📄 opcmgtview.cpp

📁 OPC Client 源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:

	// Insert the item:
	hItem = cTree.InsertItem (&tvis);
	
	// Select the item if asked:
	if (bSelect)
		cTree.SelectItem (hItem);


//*
	// Give item object the handle of the tree control item it is associated with:

	// If parent is tree control root, then we know item is a server:
	if (hParent == TVI_ROOT)
		((COPCServer *)pObject)->SetGUIHandle (hItem);

	// Otherwise item must be a group:
	else
		((COPCGroup *)pObject)->SetGUIHandle (hItem);
//*/
}

void CViewOPCMgt::Insert (HTREEITEM hParent, COPCServer* pOPCSever, bool bSelect/* = true*/)
{
	ASSERT (pOPCSever != NULL);
	
	HTREEITEM hItem;
	// Get reference to our tree control:
	CTreeCtrl &cTree = GetTreeCtrl ();
	
	int nImage=TREEVIEW_IMAGE_SERVER;
	int nSelectedImage=TREEVIEW_IMAGE_SERVER_SEL;
	if(!pOPCSever->IsAlive ())
	{
		nImage=TREEVIEW_IMAGE_SERVER_NOCONNECT;
		nSelectedImage=TREEVIEW_IMAGE_SERVER_NOCONNECT_SEL;
	}
	// Insert the item:
	UINT nMask=TVIF_IMAGE | TVIF_SELECTEDIMAGE |TVIF_TEXT | TVIF_PARAM;
	hItem = cTree.InsertItem (
		nMask,
		pOPCSever->GetName(),
		nImage,
		nSelectedImage,
		0,
		0,
		(LPARAM)pOPCSever,
		hParent,
		TVI_SORT
		);
	
	// Select the item if asked:
	if (bSelect)
		cTree.SelectItem (hItem);

	pOPCSever->SetGUIHandle (hItem);
}

void CViewOPCMgt::Insert (HTREEITEM hParent, COPCGroup* pOPCGroup, bool bSelect/* = true*/ )
{
	ASSERT (pOPCGroup != NULL);
	
	TV_INSERTSTRUCT tvis;
	HTREEITEM hItem;

	// Get reference to our tree control:
	CTreeCtrl &cTree = GetTreeCtrl ();
		
	// Fill up the tree view insert structure:
	m_strSelText=pOPCGroup->GetName();
	tvis.hParent = hParent;						// Handle to parent item
	tvis.hInsertAfter = TVI_SORT;				// Sort items in tree
												// item props we will fill	
	tvis.item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE|TVIF_TEXT  |TVIF_PARAM;
	tvis.item.lParam = (LPARAM)pOPCGroup;			// item data: pointer to object
	tvis.item.pszText =(LPTSTR) m_strSelText.operator LPCTSTR();		// item text: defer to OnGetDispInfo ()
	if(pOPCGroup->IsActive ())
	{
		tvis.item.iImage = TREEVIEW_IMAGE_GROUP;				// item image: defer to OnGetDispInfo ()
		tvis.item.iSelectedImage = TREEVIEW_IMAGE_GROUP_SEL;	// item selimage: defer to OnGetDispInfo ()
	}
	else
	{
		tvis.item.iImage = TREEVIEW_IMAGE_GROUP_NOACTIVE;				// item image: defer to OnGetDispInfo ()
		tvis.item.iSelectedImage = TREEVIEW_IMAGE_GROUP_NOACTIVE_SEL;	// item selimage: defer to OnGetDispInfo ()
	}
	// Insert the item:
	hItem = cTree.InsertItem (&tvis);
/*	
	UINT nMask=TVIF_IMAGE | TVIF_SELECTEDIMAGE |TVIF_TEXT| TVIF_PARAM;
	hItem = cTree.InsertItem (
		nMask,
		pOPCGroup->GetName(),
		TREEVIEW_IMAGE_GROUP,
		TREEVIEW_IMAGE_GROUP_SEL,
		0,
		0,
		(LPARAM)pOPCGroup,
		hParent,
		TVI_SORT
		);
//*/
	// Select the item if asked:
	if (bSelect)
		cTree.SelectItem (hItem);

	pOPCGroup->SetGUIHandle (hItem);
}

void CViewOPCMgt::Insert (HTREEITEM hParent, COPCRemoteMachine* pOPCRM, bool bSelect/* = true*/ )
{
	ASSERT (pOPCRM != NULL);
	
	HTREEITEM hItem;
	// Get reference to our tree control:
	CTreeCtrl &cTree = GetTreeCtrl ();
		
	// Insert the item:
	UINT nMask=TVIF_IMAGE | TVIF_SELECTEDIMAGE |TVIF_TEXT| TVIF_PARAM;
	hItem = cTree.InsertItem (
		nMask,
		pOPCRM->GetName(),
		TREEVIEW_IMAGE_PC,
		TREEVIEW_IMAGE_PC_SEL,
		0,
		0,
		(LPARAM)pOPCRM,
		TVI_ROOT,
		TVI_SORT
		);
	
	// Select the item if asked:
	if (bSelect)
	{
		cTree.SelectItem (hItem);
	}

	pOPCRM->SetGUIHandle (hItem);
}

void CViewOPCMgt::Delete(HTREEITEM hItem)
{
	GetTreeCtrl ().DeleteItem (hItem);
}

void CViewOPCMgt::OnSelChanged(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	HTREEITEM hSelItem=pNMTreeView->itemNew.hItem;
	
	//分析选择的是远程计算机\OPCServer\Group
	if(hSelItem)
	{
		COPCRemoteMachine* pSelOPCRM=NULL;	//当前选择项---远程计算机
		COPCServer *pSelOPCServer=NULL;		//当前选择项---OPCServer
		COPCGroup* pSelOPCGroup=NULL;		//当前选择项---OPCGroup
		CTreeCtrl &cTree = GetTreeCtrl ();

		TRACE(_T("CViewOPCMgt::OnSelChanged()--%s\n"),cTree.GetItemText (hSelItem));
		HTREEITEM hParentItem=cTree.GetParentItem (hSelItem);
		HTREEITEM hParentItem1=cTree.GetParentItem (hParentItem);
		HTREEITEM hChildItem=cTree.GetChildItem (hSelItem);

		if(NULL==hParentItem)	//选择远程计算机
		{
			pSelOPCRM=(COPCRemoteMachine*)cTree.GetItemData (hSelItem);
			GetDocument()->UpdateAllViews (this,HINT_GROUP_SELECT,(CObject*)NULL);
			
			if(cTree.GetItemText (hSelItem)==LOACAL_PC_NAME)	//本地OPCSERVER
				SetSelBranch(SEL_BRANCH_LOACALPC);
			else
				SetSelBranch(SEL_BRANCH_REMOTEPC);
		}
		else		
		{
			HTREEITEM hRMItem=cTree.GetParentItem (hParentItem);
			if(NULL==hRMItem)		//选择OPCServer
			{
				pSelOPCRM=(COPCRemoteMachine*)cTree.GetItemData (hParentItem);
				pSelOPCServer=(COPCServer*)cTree.GetItemData (hSelItem);
				GetDocument()->UpdateAllViews (this,HINT_GROUP_SELECT,(CObject*)NULL);
			
				SetSelBranch(SEL_BRANCH_OPCSERVER);
			}
			else					//选择OPCGroup
			{
				pSelOPCRM=(COPCRemoteMachine*)cTree.GetItemData (hRMItem);
				pSelOPCServer=(COPCServer*)cTree.GetItemData (hParentItem);
				pSelOPCGroup=(COPCGroup*)cTree.GetItemData (hSelItem);

		
				GetDocument()->UpdateAllViews (this,HINT_GROUP_SELECT,(CObject*)pSelOPCGroup);

				SetSelBranch(SEL_BRANCH_OPCGROUP);
			}
		}

		//保存在文档中
		CTYOPCClientDoc* pDoc=(CTYOPCClientDoc*)GetDocument();
		ASSERT(pDoc);
		pDoc->SetSelOPC (pSelOPCRM,pSelOPCServer,pSelOPCGroup);
	}
	else
		SetSelBranch(SEL_BRANCH_NULL);


	*pResult = 0;
}

void CViewOPCMgt::OnRClick(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
//	OnClick(pNMHDR, pResult);
	
	HTREEITEM hSelItem=NULL;

///	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
//	=pNMTreeView->itemNew.hItem;
	
	COPCRemoteMachine* pSelOPCRM=NULL;	//当前选择项---远程计算机
	COPCServer *pSelOPCServer=NULL;		//当前选择项---OPCServer
	COPCGroup* pSelOPCGroup=NULL;		//当前选择项---OPCGroup
	//
	CTreeCtrl &cTree = GetTreeCtrl ();
	CPoint cPtScreen,cPtClient;
	GetCursorPos(&cPtScreen);
	cPtClient = cPtScreen;
	cTree.ScreenToClient(&cPtClient);
	CRect rect;
	cTree.GetClientRect(rect);
	if(!rect.PtInRect (cPtClient))
		return;

	hSelItem =cTree.HitTest(cPtClient,NULL);
	cTree.SelectItem(hSelItem);


	CMenu cMenuUp;
 	CMenu* pMenu;
	cMenuUp.LoadMenu (IDR_MAINFRAME);
	CString strMenuText;

	UINT nFlags = MF_ENABLED | MF_STRING;
	HTREEITEM hParentItem=cTree.GetParentItem (hSelItem);

	if(NULL==hSelItem)			//无选择项
	{
		SetSelBranch(SEL_BRANCH_NULL);

		pMenu=cMenuUp.GetSubMenu (2)->GetSubMenu(0);						//加载菜单
	}
	else if(NULL==hParentItem)	//远程计算机名称
	{
		pSelOPCRM=(COPCRemoteMachine*)cTree.GetItemData (hSelItem);

		SetSelBranch(SEL_BRANCH_REMOTEPC);

		pMenu=cMenuUp.GetSubMenu (2)->GetSubMenu(0);						//加载菜单

		//增加增加OPCSERVER
		pMenu->AppendMenu (MF_SEPARATOR);			//加载菜单
		cMenuUp.GetMenuString (ID_OPCSERVER_ADD, strMenuText, MF_BYCOMMAND);
		pMenu->AppendMenu (nFlags,ID_OPCSERVER_ADD, strMenuText);			//加载菜单
	}
	else if(NULL==cTree.GetParentItem (hParentItem))	//选中OPCServer	
	{
		pSelOPCRM=(COPCRemoteMachine*)cTree.GetItemData (hParentItem);
		pSelOPCServer=(COPCServer*)cTree.GetItemData (hSelItem);

		SetSelBranch(SEL_BRANCH_OPCSERVER);

		pMenu=cMenuUp.GetSubMenu (2)->GetSubMenu(2);
		
//		pMenu->DeleteMenu (ID_PROPER_OPCSERVER,0);
		//增加增加OPCGROUP
		pMenu->AppendMenu (MF_SEPARATOR);			//加载菜单
		cMenuUp.GetMenuString (ID_OPCGROUP_ADD, strMenuText, MF_BYCOMMAND);
		pMenu->AppendMenu (nFlags,ID_OPCGROUP_ADD, strMenuText);			//加载菜单
	}
	else		//选中OPC GROUP
	{
		HTREEITEM hRMItem=cTree.GetParentItem (hParentItem);
		pSelOPCRM=(COPCRemoteMachine*)cTree.GetItemData (hRMItem);
		pSelOPCServer=(COPCServer*)cTree.GetItemData (hParentItem);
		pSelOPCGroup=(COPCGroup*)cTree.GetItemData (hSelItem);

		SetSelBranch(SEL_BRANCH_OPCGROUP);

		pMenu=cMenuUp.GetSubMenu (2)->GetSubMenu(3);						//加载菜单

		//增加增加OPCITEM
		pMenu->AppendMenu (MF_SEPARATOR);			//加载菜单
		cMenuUp.GetMenuString (ID_OPCITEM_ADD, strMenuText, MF_BYCOMMAND);
		pMenu->AppendMenu (nFlags,ID_OPCITEM_ADD, strMenuText);			//加载菜单
	}

	//保存在文档中
	CTYOPCClientDoc* pDoc=(CTYOPCClientDoc*)GetDocument();
	ASSERT(pDoc);
	pDoc->SetSelOPC (pSelOPCRM,pSelOPCServer,pSelOPCGroup);

	if(pMenu==NULL)
		return;
	pMenu->TrackPopupMenu (
		TPM_LEFTALIGN | TPM_RIGHTBUTTON,
		cPtScreen.x, cPtScreen.y, 
		AfxGetMainWnd ());


	*pResult = 0;
}

void CViewOPCMgt::SetSelBranch(DWORD dwSelBranch)
{
	//设定选择级数
	CTYOPCClientDoc* pDoc=(CTYOPCClientDoc*)GetDocument();
	ASSERT(pDoc);
	pDoc->SetSelBranch (dwSelBranch);

}

⌨️ 快捷键说明

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