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