📄 datamanagerview.cpp
字号:
// DataManagerView.cpp : implementation of the CDataManagerView class
//
#include "stdafx.h"
#include "DataManager.h"
#include "MainFrm.h"
#include "DataManagerDoc.h"
#include "DataManagerView.h"
#include "LeftView.h"
#include "PointDialog.h"
#include "UnitDialog.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDataManagerView
IMPLEMENT_DYNCREATE(CDataManagerView, CListView)
BEGIN_MESSAGE_MAP(CDataManagerView, CListView)
//{{AFX_MSG_MAP(CDataManagerView)
ON_WM_RBUTTONDOWN()
ON_COMMAND(ID_ADDPOINT, OnAddpoint)
ON_COMMAND(ID_DELETEPOINT, OnDeletepoint)
ON_COMMAND(ID_ADDUNIT, OnAddunit)
ON_COMMAND(ID_DELETEUNIT, OnDeleteunit)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDataManagerView construction/destruction
CDataManagerView::CDataManagerView()
{
// TODO: add construction code here
}
CDataManagerView::~CDataManagerView()
{
}
BOOL CDataManagerView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CListView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CDataManagerView drawing
void CDataManagerView::OnDraw(CDC* pDC)
{
CDataManagerDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
void CDataManagerView::OnInitialUpdate()
{
CListView::OnInitialUpdate();
// TODO: You may populate your ListView with items by directly accessing
// its list control through a call to GetListCtrl().
CListCtrl& m_list=GetListCtrl();
m_list.ModifyStyle(LVS_LIST|LVS_SMALLICON|LVS_ICON,
LVS_REPORT|LVS_SHOWSELALWAYS|LVS_AUTOARRANGE);
m_list.SetColumnWidth(-1,LVSCW_AUTOSIZE_USEHEADER );
}
/////////////////////////////////////////////////////////////////////////////
// CDataManagerView diagnostics
#ifdef _DEBUG
void CDataManagerView::AssertValid() const
{
CListView::AssertValid();
}
void CDataManagerView::Dump(CDumpContext& dc) const
{
CListView::Dump(dc);
}
CDataManagerDoc* CDataManagerView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDataManagerDoc)));
return (CDataManagerDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CDataManagerView message handlers
void CDataManagerView::OnStyleChanged(int nStyleType, LPSTYLESTRUCT lpStyleStruct)
{
//TODO: add code to react to the user changing the view style of your window
}
void CDataManagerView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
// TODO: Add your specialized code here and/or call the base class
int i;
CString strSelectedSegment,strSelectedUnit;
CControlSegment *p_Segment;
CControlUnit *p_Unit;
CControlPoint *p_Point;
if (pHint==NULL)
return;
CListCtrl& m_list=GetListCtrl();
CTreeCtrl& m_tree=((CLeftView*)pHint)->GetTreeCtrl();
HTREEITEM hItem=m_tree.GetSelectedItem();
int nLevel=m_tree.GetItemData(hItem);
switch(nLevel)
{
case 0:
while(m_list.DeleteColumn(0));
m_list.DeleteAllItems();
m_list.InsertColumn(0,"单元",LVCFMT_LEFT,90,-1);
strSelectedSegment=m_tree.GetItemText(hItem);
p_Segment=p_ControlModule->GetSegment(strSelectedSegment);
if (p_Segment==NULL)
return;
for (i=0;i<p_Segment->GetUnitCount();i++)
{
p_Unit=p_Segment->GetUnit(i);
CString str1;
str1=p_Unit->GetUnitName();
m_list.InsertItem(LVIF_TEXT|LVIF_STATE,i,str1,0,
LVIS_SELECTED,0,0);
}
break;
case 1:
while(m_list.DeleteColumn(0));
m_list.DeleteAllItems();
m_list.ModifyStyle(LVS_LIST|LVS_SMALLICON|LVS_ICON,
LVS_REPORT|LVS_SHOWSELALWAYS);
m_list.InsertColumn(0,"点名",LVCFMT_LEFT,90,-1);
m_list.InsertColumn(1,"当前值",LVCFMT_LEFT,90,-1);
m_list.InsertColumn(2,"说明",LVCFMT_LEFT,90,-1);
strSelectedSegment=m_tree.GetItemText(
m_tree.GetParentItem(hItem));
p_Segment=p_ControlModule->GetSegment(strSelectedSegment);
if (p_Segment==NULL)
return;
strSelectedUnit=m_tree.GetItemText(hItem);
p_Unit=p_Segment->GetUnit(strSelectedUnit);
if(p_Unit==NULL)
return;
for (i=0;i<p_Unit->GetPointCount();i++)
{
p_Point=p_Unit->GetPoint(i);
CString str1;
str1=p_Point->GetPointName();
m_list.InsertItem(LVIF_TEXT|LVIF_STATE,i,str1,0,
LVIS_SELECTED,0,0);
m_list.SetItemText(i,1,p_Point->GetPointValue());
m_list.SetItemText(i,2,p_Point->GetPointMemo());
}
m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT
|LVS_EX_GRIDLINES|LVS_EX_TRACKSELECT);
break;
}
}
void CDataManagerView::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CListView::OnRButtonDown(nFlags, point);
CMenu PopMenu;
CMenu *pMenu;
CPoint pt;
pt= point;
PopMenu.LoadMenu(IDR_EDIT);
ClientToScreen(&pt);
// show the menu (returns, when menu is closed again!)
CDataManagerDoc* m_pDoc=(CDataManagerDoc*)((CMainFrame*)
AfxGetApp()->m_pMainWnd)->GetActiveDocument();
POSITION pos=m_pDoc->GetFirstViewPosition();
CLeftView* p_TreeView;
while (pos != NULL)
{
CView* pView = m_pDoc->GetNextView(pos);
if(pView->IsKindOf(RUNTIME_CLASS(CLeftView)))
{
p_TreeView=(CLeftView*)pView;
}
}
CTreeCtrl& m_tree=p_TreeView->GetTreeCtrl();
HTREEITEM hItem=m_tree.GetSelectedItem();
if(hItem==NULL)
return;
int nLevel=m_tree.GetItemData(hItem);
switch(nLevel)
{
case 0:
pMenu = PopMenu.GetSubMenu(1);
break;
case 1:
pMenu = PopMenu.GetSubMenu(2);
break;
}
pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,
pt.x,pt.y,this);
}
void CDataManagerView::OnAddpoint()
{
// TODO: Add your command handler code here
int i=0;
CString strSelectedSegment,strSelectedUnit;
CControlSegment *p_Segment;
CControlUnit *p_Unit;
CControlPoint *p_Point;
CDataManagerDoc* m_pDoc=(CDataManagerDoc*)((CMainFrame*)
AfxGetApp()->m_pMainWnd)->GetActiveDocument();
POSITION pos=m_pDoc->GetFirstViewPosition();
CLeftView* p_TreeView;
CDataManagerView* p_ListView;
while (pos != NULL)
{
CView* pView = m_pDoc->GetNextView(pos);
if(pView->IsKindOf(RUNTIME_CLASS(CLeftView)))
{
p_TreeView=(CLeftView*)pView;
}
else if(pView->IsKindOf(RUNTIME_CLASS(CDataManagerView)))
{
p_ListView=(CDataManagerView*)pView;
}
}
CListCtrl& m_list=p_ListView->GetListCtrl();
CTreeCtrl& m_tree=p_TreeView->GetTreeCtrl();
HTREEITEM hItem=m_tree.GetSelectedItem();
strSelectedSegment=m_tree.GetItemText(
m_tree.GetParentItem(hItem));
p_Segment=p_ControlModule->GetSegment(strSelectedSegment);
if (p_Segment==NULL)
return;
strSelectedUnit=m_tree.GetItemText(hItem);
p_Unit=p_Segment->GetUnit(strSelectedUnit);
if(p_Unit==NULL)
return;
CPointDialog dlg_Point;
if(dlg_Point.DoModal()==IDOK)
{
p_Point=new CControlPoint;
p_Point->m_strPointName=dlg_Point.m_PointName;
p_Point->m_strValue=dlg_Point.m_PointValue;
p_Point->m_strMemo=dlg_Point.m_PointMemo;
p_Unit->AddPoint(p_Point);
}
}
void CDataManagerView::OnDeletepoint()
{
// TODO: Add your command handler code here
if(AfxMessageBox("删除此点吗?",MB_YESNO)==6)
{
int i=0;
CString strSelectedSegment,strSelectedUnit;
CControlSegment *p_Segment;
CControlUnit *p_Unit;
CControlPoint *p_Point;
CDataManagerDoc* m_pDoc=(CDataManagerDoc*)((CMainFrame*)
AfxGetApp()->m_pMainWnd)->GetActiveDocument();
POSITION pos=m_pDoc->GetFirstViewPosition();
CLeftView* p_TreeView;
CDataManagerView* p_ListView;
while (pos != NULL)
{
CView* pView = m_pDoc->GetNextView(pos);
if(pView->IsKindOf(RUNTIME_CLASS(CLeftView)))
{
p_TreeView=(CLeftView*)pView;
}
else if(pView->IsKindOf(RUNTIME_CLASS(CDataManagerView)))
{
p_ListView=(CDataManagerView*)pView;
}
}
CListCtrl& m_list=p_ListView->GetListCtrl();
CTreeCtrl& m_tree=p_TreeView->GetTreeCtrl();
HTREEITEM hItem=m_tree.GetSelectedItem();
strSelectedSegment=m_tree.GetItemText(
m_tree.GetParentItem(hItem));
p_Segment=p_ControlModule->GetSegment(strSelectedSegment);
if (p_Segment==NULL)
return;
strSelectedUnit=m_tree.GetItemText(hItem);
p_Unit=p_Segment->GetUnit(strSelectedUnit);
if(p_Unit==NULL)
return;
int item= m_list.GetNextItem(-1,LVNI_ALL|LVNI_SELECTED);
p_Point=p_Unit->GetPoint(m_list.GetItemText(item,0));
if(p_Point==NULL)
return;
p_Unit->DeletePoint(p_Point);
}
}
void CDataManagerView::OnAddunit()
{
// TODO: Add your command handler code here
CString strSelectedSegment;
CControlSegment *p_Segment;
CDataManagerDoc* m_pDoc=(CDataManagerDoc*)((CMainFrame*)
AfxGetApp()->m_pMainWnd)->GetActiveDocument();
POSITION pos=m_pDoc->GetFirstViewPosition();
CLeftView* p_TreeView;
CDataManagerView* p_ListView;
while (pos != NULL)
{
CView* pView = m_pDoc->GetNextView(pos);
if(pView->IsKindOf(RUNTIME_CLASS(CLeftView)))
{
p_TreeView=(CLeftView*)pView;
}
else if(pView->IsKindOf(RUNTIME_CLASS(CDataManagerView)))
{
p_ListView=(CDataManagerView*)pView;
}
}
CListCtrl& m_list=p_ListView->GetListCtrl();
CTreeCtrl& m_tree=p_TreeView->GetTreeCtrl();
HTREEITEM hItem=m_tree.GetSelectedItem();
strSelectedSegment=m_tree.GetItemText(hItem);
p_Segment=p_ControlModule->GetSegment(strSelectedSegment);
if (p_Segment==NULL)
return;
CUnitDialog dlg_Unit;
if(dlg_Unit.DoModal()==IDOK)
{
p_Segment->AddUnit(dlg_Unit.m_UnitName);
}
}
void CDataManagerView::OnDeleteunit()
{
// TODO: Add your command handler code here
if(AfxMessageBox("删除此单元吗?",MB_YESNO)==6)
{
CString strSelectedSegment,strSelectedUnit;
CControlSegment *p_Segment;
CControlUnit *p_Unit;
CDataManagerDoc* m_pDoc=(CDataManagerDoc*)((CMainFrame*)
AfxGetApp()->m_pMainWnd)->GetActiveDocument();
POSITION pos=m_pDoc->GetFirstViewPosition();
CLeftView* p_TreeView;
CDataManagerView* p_ListView;
while (pos != NULL)
{
CView* pView = m_pDoc->GetNextView(pos);
if(pView->IsKindOf(RUNTIME_CLASS(CLeftView)))
{
p_TreeView=(CLeftView*)pView;
}
else if(pView->IsKindOf(RUNTIME_CLASS(CDataManagerView)))
{
p_ListView=(CDataManagerView*)pView;
}
}
CListCtrl& m_list=p_ListView->GetListCtrl();
CTreeCtrl& m_tree=p_TreeView->GetTreeCtrl();
HTREEITEM hItem=m_tree.GetSelectedItem();
strSelectedSegment=m_tree.GetItemText(hItem);
p_Segment=p_ControlModule->GetSegment(strSelectedSegment);
if (p_Segment==NULL)
return;
pos=m_list.GetFirstSelectedItemPosition();
strSelectedUnit=m_list.GetItemText(
m_list.GetNextSelectedItem(pos),0);
p_Unit=p_Segment->GetUnit(strSelectedUnit);
if(p_Unit==NULL)
return;
p_Segment->DeleteUnit(p_Unit);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -