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

📄 opcmgtview.cpp

📁 OPC Client 源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// OpcMgtView.cpp : implementation file
//

#include "stdafx.h"
#include "TYOPCClient.h"
#include "OpcMgtView.h"
#include "TYOPCClientDoc.h"

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

/////////////////////////////////////////////////////////////////////////////
// CViewOPCMgt

IMPLEMENT_DYNCREATE(CViewOPCMgt, CTreeView)

CViewOPCMgt::CViewOPCMgt()
{
	m_hSelItem=NULL;
}

CViewOPCMgt::~CViewOPCMgt()
{
}


BEGIN_MESSAGE_MAP(CViewOPCMgt, CTreeView)
	//{{AFX_MSG_MAP(CViewOPCMgt)
	ON_WM_CREATE()
	ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelChanged)
	ON_NOTIFY_REFLECT(NM_RCLICK, OnRClick)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CViewOPCMgt drawing

void CViewOPCMgt::OnDraw(CDC* pDC)
{
	CDocument* pDoc = GetDocument();
	// TODO: add draw code here
}

/////////////////////////////////////////////////////////////////////////////
// CViewOPCMgt diagnostics

#ifdef _DEBUG
void CViewOPCMgt::AssertValid() const
{
	CTreeView::AssertValid();
}

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

/////////////////////////////////////////////////////////////////////////////
// CViewOPCMgt message handlers

int CViewOPCMgt::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CTreeView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here
	// Initialize the image list for the items. The bitmap must use a 
	// purple background color, RGB (255, 0, 255), so that the CImageList
	// object can construct a mask.  The images are 16x16 pixels.  Set the
	// image list background color to CLR_NONE so masked pixels will be
	// transparent. 
	// Image number		Use
	//	0				Connected Server
	//	1				not used
	//	2				Active Group (not selected)
	//	3				Inactive Group (not selected)
	//	4				Active Group (selected)
	//	5				Inactive Group (selected)
	//	6				Disconnected Server
	//	7				Invalid Group
	//	8				not used
	//	9				not used
	m_cImageList.Create (IDB_GROUPIMAGES, 16, 4, RGB (255, 0, 255));
	m_cImageList.SetBkColor (CLR_NONE);
	GetTreeCtrl ().SetImageList (&m_cImageList, LVSIL_NORMAL);

	// Set the style we want for the tree:  Draw lines connecting child and
	// parent, has buttons to expand or collapse tree, draw line to root and
	// let root have button.
	GetTreeCtrl ().ModifyStyle (0, // Don't remove any styles
		TVS_HASLINES | TVS_HASBUTTONS | TVS_LINESATROOT
		|TVS_FULLROWSELECT|TVS_SHOWSELALWAYS); // Add these styles
	
	return 0;
}

void CViewOPCMgt::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) 
{
//*
	switch (lHint)
		{
		//-------------------------------------------------------------------------------------------------------
		//-----Remote PC------
		//-------------------------------------------------------------------------------------------------------
		case HINT_REMPC_ADD:		//增加计算机
			{
			ASSERT (pHint != NULL);		// pHint contains CKServer *
			Insert(TVI_ROOT,(COPCRemoteMachine*)pHint);
			break;
			}

		case HINT_REMPC_REMOVE:	//删除计算机
			{
			ASSERT (pHint != NULL);		// pHint contains CKServer *
			Delete (((COPCRemoteMachine *)pHint)->GetGUIHandle ());
			break;
			}
		//-------------------------------------------------------------------------------------------------------
		//-----Server------
		//-------------------------------------------------------------------------------------------------------
		case HINT_SERVER_ADD:		//增加服务器
			{
			ASSERT (pHint != NULL);		// pHint contains COPCServer *
			COPCServer* pOPCServer=(COPCServer*)pHint;
			HTREEITEM hParent=pOPCServer->GetRemoteMachine ()->GetGUIHandle ();

			Insert(hParent,pOPCServer);
			break;
			}

		case HINT_REMOVE_SERVER:	//删除服务器
			{
			ASSERT (pHint != NULL);		// pHint contains COPCServer *
			Delete (((COPCServer *)pHint)->GetGUIHandle ());
			break;
			}
		case HINT_SERVER_PROPERTY:
		case HINT_OPCSERVER_SHUTDOWN_EVENT:
			{
			ASSERT (pHint != NULL);		// pHint contains COPCServer *
			COPCServer* pOPCServer=(COPCServer*)pHint;
			HTREEITEM   hItem=pOPCServer->GetGUIHandle ();
			CTreeCtrl &cTree = GetTreeCtrl ();
			//名称
			cTree.SetItemText (hItem,pOPCServer->GetName ());
			//状态
			if(pOPCServer->IsConnected())
				cTree.SetItemImage (hItem,TREEVIEW_IMAGE_SERVER,TREEVIEW_IMAGE_SERVER_SEL);
			else
				cTree.SetItemImage (hItem,TREEVIEW_IMAGE_SERVER_NOCONNECT,TREEVIEW_IMAGE_SERVER_NOCONNECT_SEL);
			break;
			}

			
		//-------------------------------------------------------------------------------------------------------
		//-----GROUP------
		//-------------------------------------------------------------------------------------------------------
		case HINT_GROUP_ADD:		//增加组
			{
			ASSERT (pHint != NULL);		// pHint contains COPCGroup *
			COPCGroup *pGroup = (COPCGroup *)pHint;

			COPCServer *PtScreenarent = pGroup->GetParentServer ();
			ASSERT (PtScreenarent != NULL);

			Insert (PtScreenarent->GetGUIHandle (), pGroup);
			break;
			}

		case HINT_GROUP_REMOVE:		//删除组
			{
			ASSERT (pHint != NULL);		// pHint contains COPCGroup *
			Delete (((COPCGroup *)pHint)->GetGUIHandle ());
			break;
			}
		case HINT_GROUP_SELECT:		//选择组
			{
			// pHint contains COPCGroup *

			// Get reference to link control:
			CTreeCtrl &cTree = GetTreeCtrl ();
			
			// Get handle of group:
			HTREEITEM hItem;
			if (pHint == NULL)	
				{
				// No group passed in, get the first one in the tree
				hItem = cTree.GetChildItem (TVI_ROOT);	// Get first child of root (i.e., server)
				hItem = cTree.GetChildItem (hItem);		// Get first child of parent (i.e., group)
				}

			else
				hItem = ((COPCGroup*)pHint)->GetGUIHandle ();

			// Select the group:
			if (hItem != NULL)
				{
				// Select the group:
				cTree.SelectItem (hItem);

				// Force a repaint:
				cTree.Invalidate (false);
				cTree.UpdateWindow ();
				}
			}
			break;
		case HINT_GROUP_SET_STATE:
			{
				//更改位图
				ASSERT (pHint != NULL);		// pHint contains COPCGroup *
				COPCGroup *pGroup = (COPCGroup *)pHint;
				HTREEITEM hItem = ((COPCGroup*)pHint)->GetGUIHandle ();
				
				CTreeCtrl &cTree = GetTreeCtrl ();
				if(pGroup->IsActive ())
					cTree.SetItemImage (hItem,TREEVIEW_IMAGE_GROUP,TREEVIEW_IMAGE_GROUP_SEL);
				else
					cTree.SetItemImage (hItem,TREEVIEW_IMAGE_GROUP_NOACTIVE,TREEVIEW_IMAGE_GROUP_NOACTIVE_SEL);
				break;
			}
		case HINT_REMPC_RENAME:
		case HINT_SERVER_RENAME:
		case HINT_GROUP_RENAME:
			{
				ASSERT (pHint != NULL);	
				CString* pstrText=(CString*)pHint;
				CTreeCtrl &cTree = GetTreeCtrl ();
				HTREEITEM hItem=cTree.GetSelectedItem ();
				if(hItem)
					cTree.SetItemText (hItem,pstrText->operator LPCTSTR ());
				break;
			}
/*/
		case HINT_LOAD_PROJECT:
			{
			// pHint contains CKServer * (head of linked list of servers)
			ASSERT (pHint != NULL);		
			COPCServer *pServer = (COPCServer *)pHint;

			// Loop over all servers in linked list.  End of list will be
			// indicated by a NULL pointer:
			while (pServer)
				{
				// Insert server item into the root of the tree:
				Insert (TVI_ROOT,(CObject*) pServer, false);

				// Insert server's groups:

				// We'll need the handle of the parent server,
				HTREEITEM hParent = pServer->GetGUIHandle ();

				// and the head of its linked list of groups:
				COPCGroup *pGroup = pServer->GetGroupHead ();

				// Loop over all groups in linked list.  End of list will be
				// indicated by a NULL pointer:
				while (pGroup)
					{
					// Insert group item into the server branch of the tree:
					Insert (hParent, pGroup, false);

					// Move onto next group in linked list:
//					pGroup = pGroup->GetNext ();
					}

				// Move onto next server connection in linked list:
//				pServer = pServer->GetNext ();
				}

			// Select first item in the tree:
			CTreeCtrl &cTree = GetTreeCtrl ();
			HTREEITEM hFirstItem = cTree.GetFirstVisibleItem ();

			if (hFirstItem != NULL)
				cTree.SelectItem (hFirstItem);
			}
			break;
//*/
		case HINT_REFRESH_GROUPVIEW:
			{
			// Force a repaint:
			GetTreeCtrl ().Invalidate (true);
			GetTreeCtrl ().UpdateWindow ();
			break;
			}
		case HINT_NEW_DOCUMENT:
		case HINT_OPEN_DOCUMENT:
			{
				GetTreeCtrl ().DeleteAllItems ();
				break;
			}
		default:
			// Default processing:
			CView::OnUpdate (pSender, lHint, pHint);
			break;
		}
//*/	
}

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

	// Get reference to our tree control:
	CTreeCtrl &cTree = GetTreeCtrl ();
		
	// Fill up the tree view insert structure:
	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_PARAM | TVIF_TEXT;
	
	tvis.item.lParam = (LPARAM)pObject;			// item data: pointer to object
	tvis.item.pszText = LPSTR_TEXTCALLBACK;		// item text: defer to OnGetDispInfo ()
	tvis.item.iImage = I_IMAGECALLBACK;			// item image: defer to OnGetDispInfo ()
	tvis.item.iSelectedImage = I_IMAGECALLBACK;	// item selimage: defer to OnGetDispInfo ()

⌨️ 快捷键说明

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