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

📄 datamanagerview.cpp

📁 数据库开发
💻 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 + -