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

📄 themeview.cpp

📁 我上载了那么多怎么都说已经有上载的啦
💻 CPP
字号:
// ThemeView.cpp : implementation file
//

#include "stdafx.h"
#include "gpmis.h"
#include "mainfrm.h"
#include "ThemeView.h"
#include "global.h"
#include "student.h"
#include "teacher.h"
#include "bcmenu.h"
#include "StatisticsDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CThemeView
extern CGPMISApp theApp;

#define NUM1_COLUMNS	10

static _TCHAR *_gszLabel1[NUM1_COLUMNS] =
{
    _T("序号"), _T("学号"), _T("姓名"), _T("班级"), _T("题目"), _T("类型"), _T("题目性质"), _T("指导老师"), _T("职称"), _T("科研经历")
};
static int _gnFmt1[NUM1_COLUMNS] = 
{
	LVCFMT_LEFT, LVCFMT_LEFT, LVCFMT_CENTER , LVCFMT_CENTER, LVCFMT_CENTER, LVCFMT_CENTER, LVCFMT_CENTER , LVCFMT_CENTER, LVCFMT_CENTER, LVCFMT_CENTER
};
static int _gnWidth1[NUM1_COLUMNS] = 
{
	45, 85, 60, 60, 265, 42, 60, 60, 72, 60
};

IMPLEMENT_DYNCREATE(CThemeView, CListVwEx)

CThemeView::CThemeView()
{
	m_strTeacher = "";
	m_strClass = "";
}

CThemeView::~CThemeView()
{
}


BEGIN_MESSAGE_MAP(CThemeView, CListVwEx)
	//{{AFX_MSG_MAP(CThemeView)
	ON_NOTIFY_REFLECT(LVN_ENDLABELEDIT, OnEndLabelEdit)
	ON_WM_CONTEXTMENU()
	ON_COMMAND(ID_STATISTICS, OnStatistics)
	ON_COMMAND(ID_FILE_PRINT, OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, OnFilePrintPreview)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CThemeView drawing

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

/////////////////////////////////////////////////////////////////////////////
// CThemeView diagnostics

#ifdef _DEBUG
void CThemeView::AssertValid() const
{
	CListVwEx::AssertValid();
}

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

/////////////////////////////////////////////////////////////////////////////
// CThemeView message handlers

void CThemeView::OnInitialUpdate() 
{
	CListVwEx::OnInitialUpdate();
	
	// TODO: Add your specialized code here and/or call the base class
	DrawLabel();
	DrawList();

	int nColumnType[64];
	nColumnType[0] = ELCT_INTEGER;	
	nColumnType[1] = ELCT_STRING_CASE;	
	nColumnType[2] = ELCT_STRING_CASE;	
	nColumnType[3] = ELCT_STRING_CASE;	
	nColumnType[4] = ELCT_STRING_CASE;	
	nColumnType[5] = ELCT_STRING_CASE;	
	nColumnType[6] = ELCT_STRING_CASE;	
	nColumnType[7] = ELCT_STRING_CASE;	
	nColumnType[8] = ELCT_STRING_CASE;	
	nColumnType[9] = ELCT_STRING_CASE;	
	SetColumnType(nColumnType);

	BOOL bCanEdit[64];
	bCanEdit[0] = FALSE;	
	bCanEdit[1] = FALSE;	
	bCanEdit[2] = FALSE;	
	bCanEdit[3] = FALSE;	
	bCanEdit[4] = FALSE;	
	bCanEdit[5] = FALSE;	
	bCanEdit[6] = FALSE;	
	bCanEdit[7] = FALSE;	
	bCanEdit[8] = FALSE;	
	bCanEdit[9] = FALSE;	
	SetCanEdit(bCanEdit);

	GetListCtrl().SetExtendedStyle(LVS_EX_GRIDLINES);

}

void CThemeView::DrawLabel()
{
	int i;
	LV_COLUMN lvc;
	CListCtrl& ListCtrl = GetListCtrl();

	// delete columns
	int sum = NUM1_COLUMNS;
	_TCHAR **szLabel = _gszLabel1;
	int *nWidth = _gnWidth1;
	int *nFmt = _gnFmt1;

	for(i = 0; i<NUM1_COLUMNS; i++)
	{
		ListCtrl.DeleteColumn(0);
	}

	// insert columns
	lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;

	for(i = 0; i<sum; i++)
	{
		lvc.iSubItem = i;
		lvc.pszText = szLabel[i];
		lvc.cx = nWidth[i];
		lvc.fmt = nFmt[i];
		ListCtrl.InsertColumn(i,&lvc);
	}

	SetSortFirstCol(TRUE);
	ListCtrl.EnableToolTips(TRUE);
}

void CThemeView::DrawList()
{
	LV_ITEM lvi;
	CListCtrl& ListCtrl = GetListCtrl();
	int i = 0;
	char cNum[100];
	CString key;
	CString strName;

	// delete list items
	ListCtrl.DeleteAllItems();

	lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE;
	lvi.iSubItem = 0;
	lvi.iImage = 0;
	lvi.stateMask = LVIS_STATEIMAGEMASK;
	lvi.state = INDEXTOSTATEIMAGEMASK(1);
	
	BOOL bCanEdit[64];
	bCanEdit[0] = FALSE;	
	bCanEdit[1] = FALSE;	
	bCanEdit[2] = FALSE;	
	bCanEdit[3] = FALSE;	
	bCanEdit[4] = FALSE;	
	bCanEdit[5] = FALSE;	
	bCanEdit[6] = FALSE;	
	bCanEdit[7] = FALSE;	
	bCanEdit[8] = FALSE;	
	bCanEdit[9] = FALSE;	
	if( m_strTeacher == theApp.GetLogin() || theApp.IsAdmin() )
	{
		bCanEdit[4] = TRUE;	 // 修改
		bCanEdit[5] = TRUE;	 // 修改
		bCanEdit[6] = TRUE;	 // 修改
	}
	SetCanEdit(bCanEdit);

	m_nThemeSum = 0;
	m_nTypeSum[0] = m_nTypeSum[1] = m_nTypeSum[2] = m_nTypeSum[3] = m_nTypeSum[4] = 0;
	m_nKindSum[0] = m_nKindSum[1] = m_nKindSum[2] = 0;
	
	CStudentList& studentList = CGlobal::GetInstance().m_studentList;
	for ( POSITION pos = studentList.GetHeadPosition(); pos != NULL; )
	{
		CStudent* pStudent = studentList.GetNext( pos );
		if( pStudent )
		{
			BOOL bDisplay = TRUE;
			if( m_strTeacher != "" && m_strTeacher != pStudent->GetTeacher() )
				bDisplay = FALSE;
			if( m_strClass != "" && m_strClass != pStudent->GetClass() )
				bDisplay = FALSE;
			if( bDisplay )
			{
				// insert items
				sprintf(cNum,"%d",pStudent->GetID());
				lvi.iItem = i;
				lvi.pszText = (LPTSTR)cNum;
				ListCtrl.InsertItem(&lvi);

				// set SelectedItem text for additional columns
				CTeacher* pTeacher = CGlobal::GetInstance().FindTeacher(pStudent->GetTeacher());

				ListCtrl.SetItemText(i, 1, pStudent->GetNumber());
				ListCtrl.SetItemText(i, 2, pStudent->GetName());
				ListCtrl.SetItemText(i, 3, pStudent->GetClass());
				ListCtrl.SetItemText(i, 4, pStudent->GetTheme().GetTheme());
				ListCtrl.SetItemText(i, 5, pStudent->GetTheme().GetType());
				ListCtrl.SetItemText(i, 6, pStudent->GetTheme().GetKind());
				ListCtrl.SetItemText(i, 7, pStudent->GetTeacher());
				if( pTeacher )
				{
					ListCtrl.SetItemText(i, 8, pTeacher->GetTitle(CGlobal::GetInstance().m_TitleMap));
					ListCtrl.SetItemText(i, 9, pTeacher->GetExperience());
				}
						
				i++;

				if( m_strTeacher == "" )
				{
					int nType = atoi(pStudent->GetTheme().GetType());
					if( nType >= 1 && nType <= 5 )
					{
						m_nTypeSum[nType-1]++; 
					}
					CString strKind = pStudent->GetTheme().GetKind();
					strKind.MakeLower();
					if( strKind != "" )
					{
						m_nKindSum[strKind.GetAt(0)-'a']++;
					}
					if( pStudent->GetTheme().GetTheme() != "" )
						m_nThemeSum++;
				}
			}
		}
	}

	Calculate();
}


BOOL CThemeView::PreCreateWindow(CREATESTRUCT& cs) 
{
	// TODO: Add your specialized code here and/or call the base class
	
	return CListVwEx::PreCreateWindow(cs);
}

void CThemeView::OnEndLabelEdit(NMHDR* pNMHDR, LRESULT* pResult) 
{
	LV_DISPINFO *plvDispInfo = (LV_DISPINFO *)pNMHDR;
	LV_ITEM	*plvItem = &plvDispInfo->item;

	int nID = atoi(GetListCtrl().GetItemText(plvItem->iItem, 0));
	CString strNumber = GetListCtrl().GetItemText(plvItem->iItem, 1);
	CStudent* pStudent = CGlobal::GetInstance().FindStudent(nID, strNumber);

	CString sTheme = pStudent->GetTheme().GetTheme();
	CString sType = pStudent->GetTheme().GetType();
	CString sKind = pStudent->GetTheme().GetKind();
	
	if( m_subitem == 4 && plvItem->pszText != NULL )
	{
		sTheme = plvItem->pszText;
	}
	if( m_subitem == 5 && plvItem->pszText != NULL )
	{
		sType = plvItem->pszText;
		int nType = atoi(plvItem->pszText);
		if( nType < 1 || nType > 5 )
		{
			plvItem->pszText = NULL;
			CString strInfo;
			strInfo = "类型只能选择1~5\r\n";
			for(int i = 1; i <= 5 ;i++)
			{
				CString key;
				CString value;
				key.Format("%d",i);
				if( CGlobal::GetInstance().m_ThemeTypeMap.Lookup(key,value) )
				{
					CString strTemp;
					strTemp.Format("%d: %s\r\n", i, value);
					strInfo += strTemp;
				}
			}
			AfxMessageBox(strInfo, MB_OK|MB_ICONINFORMATION);
			CListVwEx::OnEndLabelEdit(pNMHDR, pResult);
			return;
		}
	}
	if( m_subitem == 6 && plvItem->pszText != NULL )
	{
		sKind = plvItem->pszText;
		if( sKind != "a" && sKind != "b" && sKind != "c" )
		{
			plvItem->pszText = NULL;
			CString strInfo;
			strInfo = "类型只能选择a,b,c\r\n";
			char* ss[] = {	"a",  "b",  "c" , "\0"	};
			for(int i = 0; i < 3 ;i++)
			{
				CString key;
				CString value;
				key.Format("%s",ss[i]);
				if( CGlobal::GetInstance().m_ThemeKindMap.Lookup(key,value) )
				{
					CString strTemp;
					strTemp.Format("%s: %s\r\n", ss[i], value);
					strInfo += strTemp;
				}
			}
			AfxMessageBox(strInfo, MB_OK|MB_ICONINFORMATION);
			CListVwEx::OnEndLabelEdit(pNMHDR, pResult);
			return;
		}
	}

	if( pStudent )
	{
		CTheme oldtheme = pStudent->GetTheme();
		if( oldtheme.GetNumber() != "" )
		{
			CTheme theme = CTheme(oldtheme.GetNumber(), oldtheme.GetYear(), sTheme, sType, sKind);
			CTheme::Update(theme);
			pStudent->SetTheme(theme);
		}
		else
		{
			CMainFrame* pMainFrm = (CMainFrame*)GetParentFrame();
			CTheme theme = CTheme(strNumber, pMainFrm->GetYear(), sTheme, sType, sKind);
			CTheme::Create(theme);
			pStudent->SetTheme(theme);
		}

		CMainFrame* pMainFrm = (CMainFrame*)GetParentFrame();
		pMainFrm->SetModifyTheme(TRUE);
	}

	CListVwEx::OnEndLabelEdit(pNMHDR, pResult);
}


void CThemeView::OnContextMenu(CWnd* pWnd, CPoint point) 
{
	// TODO: Add your message handler code here
	BCMenu menu;
	menu.LoadMenu(IDR_POPUP_MENU);
	menu.LoadToolbar(IDR_TOOLBAR_CONTEXT);		
	CMenu* psubmenu = NULL;
	psubmenu = menu.GetSubMenu(2);

	if( psubmenu )
	{
		psubmenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, AfxGetMainWnd());
	}
	
}

void CThemeView::OnStatistics() 
{
	// TODO: Add your command handler code here
	CStatisticsDlg	StatisticsDlg(this);
	StatisticsDlg.DoModal();
}

void CThemeView::Calculate()
{
	CTeacherList& list = CGlobal::GetInstance().m_teacherList;
	m_nResearchSum[0] = m_nResearchSum[1] = m_nResearchSum[2] = 0;
	m_nLevelSum[0] = m_nLevelSum[1] = 0;
	m_nTeacherSum = 0;
	POSITION pos = list.GetHeadPosition();
	while( pos )
	{
		CTeacher* pTeacher = list.GetNext(pos);
		if( pTeacher )
		{
			CString strExp = pTeacher->GetExperience();
			strExp.MakeUpper();
			if( strExp.GetAt(0) == 'G' )
				m_nResearchSum[0]++;
			else if( strExp.GetAt(0) == 'S' )
				m_nResearchSum[1]++;
			else if( strExp.GetAt(0) == 'X' )
				m_nResearchSum[2]++;
			CString key, strLevel;
			key.Format("%d", pTeacher->GetTitleID());
			
			if( CGlobal::GetInstance().m_LevelMap.Lookup(key,strLevel) )
			{
				if( strLevel == "高级" )
					m_nLevelSum[0]++;
				else if( strLevel == "副高" )
					m_nLevelSum[0]++;
				else if( strLevel == "中级" )
					m_nLevelSum[1]++;
			}
			m_nTeacherSum++;
		}
	}
}

void CThemeView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo) 
{
	// TODO: Add your specialized code here and/or call the base class
	CRect Rect;
	long lWidth, lHeight;

	GetClientRect(&Rect);
	lWidth = Rect.Width();
	lHeight = Rect.Height();

	PrintList(pDC);
	lHeight = m_lHeight;
	// get toolbar state
	m_nPageWidth  = pDC->GetDeviceCaps(HORZRES);
	m_nPageHeight = pDC->GetDeviceCaps(VERTRES);

	m_nXPage = (unsigned int)((float)lWidth*2.54+m_nPageWidth-5)/m_nPageWidth;
	m_nYPage = (unsigned int)((float)lHeight*2.54+m_nPageHeight-5)/m_nPageHeight;
	m_nXPage = (m_nXPage > 0) ? m_nXPage : 1;
	m_nYPage = (m_nYPage > 0) ? m_nYPage : 1;
	pInfo->SetMaxPage(m_nXPage*m_nYPage);
	
	CListVwEx::OnBeginPrinting(pDC, pInfo);
}

void CThemeView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) 
{
	// TODO: Add your specialized code here and/or call the base class
	
	CListVwEx::OnPrepareDC(pDC, pInfo);

	if(!pInfo)
		return;

	pDC->SetViewportOrg(-m_nPageWidth*((pInfo->m_nCurPage-1)/m_nYPage), -m_nPageHeight*((pInfo->m_nCurPage-1)%m_nYPage));
}

BOOL CThemeView::OnPreparePrinting(CPrintInfo* pInfo) 
{
	// TODO: call DoPreparePrinting to invoke the Print dialog box
	return DoPreparePrinting(pInfo);

//	return CListVwEx::OnPreparePrinting(pInfo);
}

void CThemeView::PrintList(CDC *pDC)
{
	CRect Rect1,Rect2;
	CMyListCtrl& ListCtrl = (CMyListCtrl&)GetListCtrl();
	CHeaderCtrl* pHeaderCtrl = ListCtrl.GetHeaderCtrl();
	CString strTemp, strTitle;
	int nTitleY = 10;
	int nHeight = 100;
	int nLeft, nRight;
	int sum = NUM1_COLUMNS;
	_TCHAR **szLabel;
	int *nFmt;

	szLabel = _gszLabel1;
	nFmt = _gnFmt1;

	pDC->SetMapMode(MM_ISOTROPIC );
	pDC->SetTextAlign(TA_LEFT);

	CFont* pOldFont = pDC->SelectObject(&m_ftFont);

	for( int j = 0; j<pHeaderCtrl->GetItemCount(); j++) 
	{
		pHeaderCtrl->GetItemRect(j, &Rect1);
		
		strTemp.Format("%s",szLabel[j]);
		Rect2.left = (LONG)(Rect1.left*2.54);
		Rect2.right = (LONG)(Rect1.right*2.54);
		Rect2.top = (LONG)(-Rect1.top*2.54-nHeight);
		Rect2.bottom = (LONG)(-Rect1.bottom*2.54-nHeight);
		if( nFmt[j] == LVCFMT_LEFT )
			pDC->DrawText(strTemp,Rect2,DT_LEFT|DT_VCENTER|DT_SINGLELINE);
		if( nFmt[j] == LVCFMT_CENTER )
			pDC->DrawText(strTemp,Rect2,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
		if( nFmt[j] == LVCFMT_RIGHT )
			pDC->DrawText(strTemp,Rect2,DT_RIGHT|DT_VCENTER|DT_SINGLELINE);
		pDC->MoveTo(Rect2.left, Rect2.bottom);
		pDC->LineTo(Rect2.right, Rect2.bottom);
		if( j == 0 )
			nLeft = Rect2.left;
		if( j == pHeaderCtrl->GetItemCount()-1 )
			nRight = Rect2.right;

		for( int i = 0; i<ListCtrl.GetItemCount(); i++)
		{
			ListCtrl.GetItemRect(i,&Rect2,LVIR_BOUNDS);   
			strTemp = ListCtrl.GetItemText(i,j);
			Rect2.left = (LONG)(Rect1.left*2.54);
			Rect2.right = (LONG)(Rect1.right*2.54);
			Rect2.top = (LONG)(-(Rect2.top*2.54 + 10)-nHeight);
			Rect2.bottom = (LONG)(-(Rect2.bottom*2.54 + 10)-nHeight);
			if( nFmt[j] == LVCFMT_LEFT )
				pDC->DrawText(strTemp,Rect2,DT_LEFT|DT_VCENTER|DT_SINGLELINE);
			if( nFmt[j] == LVCFMT_CENTER )
				pDC->DrawText(strTemp,Rect2,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
			if( nFmt[j] == LVCFMT_RIGHT )
				pDC->DrawText(strTemp,Rect2,DT_RIGHT|DT_VCENTER|DT_SINGLELINE);

		}
	}
	pDC->MoveTo(nLeft, Rect2.bottom);
	pDC->LineTo(nRight, Rect2.bottom);

	pDC->SelectObject(pOldFont);

	m_lHeight = -Rect2.bottom+60;
}

⌨️ 快捷键说明

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