📄 opcmgtview.cpp
字号:
// 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 + -