📄 lessonview.cpp
字号:
// LessonView.cpp : implementation of the CLessonView class
//
#include "stdafx.h"
#include "Lesson.h"
#include "LessonDoc.h"
#include "LessonView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include "MainFrm.h"
#include "AddMissionDlg.h"
#include "ChangeLessonDlg.h"
#include "PageSetDlg.h"
#include <winuser.h>
/////////////////////////////////////////////////////////////////////////////
// CLessonView
IMPLEMENT_DYNCREATE(CLessonView, CListView)
BEGIN_MESSAGE_MAP(CLessonView, CListView)
//{{AFX_MSG_MAP(CLessonView)
ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk)
ON_WM_KEYDOWN()
ON_WM_KEYUP()
ON_COMMAND(ID_ADDMISSION, OnAddmission)
ON_UPDATE_COMMAND_UI(ID_ADDMISSION, OnUpdateAddmission)
ON_COMMAND(ID_DELETE, OnDelete)
ON_UPDATE_COMMAND_UI(ID_DELETE, OnUpdateDelete)
ON_COMMAND(ID_FIX, OnFix)
ON_UPDATE_COMMAND_UI(ID_FIX, OnUpdateFix)
ON_WM_RBUTTONDOWN()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONDOWN()
ON_COMMAND(ID_FILE_PRINT_SETUP, OnFilePrintSetup)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CListView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CListView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CListView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLessonView construction/destruction
CLessonView::CLessonView()
{
// TODO: add construction code here
m_ViewInfo=-1;
m_Status=FALSE;
}
CLessonView::~CLessonView()
{
}
BOOL CLessonView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CListView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CLessonView drawing
void CLessonView::OnDraw(CDC* pDC)
{
CLessonDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CListCtrl& refCtrl = GetListCtrl();
// refCtrl.InsertItem(0, "Item!");
// TODO: add draw code for native data here
}
void CLessonView::OnInitialUpdate()
{
CListView::OnInitialUpdate();
// TODO: You may populate your ListView with items by directly accessing
// its list control through a call to GetListCtrl().
}
/////////////////////////////////////////////////////////////////////////////
// CLessonView printing
BOOL CLessonView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
CLessonDoc * pDoc=GetDocument();
if(pDoc->m_Print.PrePrinting(pInfo))
return DoPreparePrinting(pInfo);
else
{
MessageBox("对不起!\n\n未注册版本不享有打印功能","未注册",MB_ICONERROR);
return NULL;
}
}
void CLessonView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: Add your specialized code here and/or call the base class
CLessonDoc * pDoc=GetDocument();
pDoc->m_Print.Print(pDC,pInfo);
CListView::OnPrint(pDC, pInfo);
}
void CLessonView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CLessonView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CLessonView diagnostics
#ifdef _DEBUG
void CLessonView::AssertValid() const
{
CListView::AssertValid();
}
void CLessonView::Dump(CDumpContext& dc) const
{
CListView::Dump(dc);
}
CLessonDoc* CLessonView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CLessonDoc)));
return (CLessonDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CLessonView message handlers
void CLessonView::OnStyleChanged(int nStyleType, LPSTYLESTRUCT lpStyleStruct)
{
//TODO: add code to react to the user changing the view style of your window
}
void CLessonView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
// TODO: Add your specialized code here and/or call the base class
CLessonDoc * pDoc = GetDocument();
CMainFrame * pf=(CMainFrame *)AfxGetApp()->m_pMainWnd;
if(pf)
{
CStatusBar * Bar=&pf->m_wndStatusBar;
if(Bar)
{
CString str;
str.Format("%d个教师,%d个任务",pDoc->GetTeacherCount(),pDoc->GetMissionCount());
Bar->SetPaneText(1,str);
}
}
if(pDoc->m_TeacherArray.GetSize()<1)
{
GetListCtrl().DeleteAllItems();
return;
}
switch(pDoc->m_Info.m_ViewStatus)
{
case TEACHER_MISSION:
BuildHead(0);
UpdateMission();
break;
case TEACHER_LESSON:
BuildHead(1);
UpdateTeacherLesson();
break;
case CLASS_LESSON:
if(pDoc->m_Info.m_SelectGrade>0)
{
if(pDoc->m_Info.m_SelectClass>0)
{
BuildHead(2);
UpdateClassLesson();
}
else
{
BuildHead(3);
UpdateGradeLesson();
}
}
else
{
BuildHead(4);
UpdateTotalLesson();
}
break;
}
// CMainFrame * pf=(CMainFrame *)AfxGetApp()->m_pMainWnd;
// if(pf)
// {
// CString str;
// CStatusBar * bar=&pf->m_wndStatusBar;
// if(bar)
// {
// str.Format("%d个教师,%d个任务",pDoc->m_TeacherArray.GetSize(),pDoc->GetMissionCount());
// bar->SetPaneText(1,str);
// }
// }
}
void CLessonView::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
FixMission();
*pResult = 0;
}
void CLessonView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
CLessonDoc * pDoc=GetDocument();
POSITION pos;int n;
pos=GetListCtrl().GetFirstSelectedItemPosition();
n=GetListCtrl().GetNextSelectedItem(pos);
CString str;
str.Format("%d,%d,%d",nChar,nRepCnt,nFlags);
CMainFrame * pf=(CMainFrame *)AfxGetApp()->m_pMainWnd;
CStatusBar * Bar=&pf->m_wndStatusBar;
if(Bar)
Bar->SetPaneText(1,str);
switch(nChar)
{
case 46:
if(pDoc->m_Info.m_ViewStatus==TEACHER_MISSION&&n>=0)
{
// if(MessageBox("确实要删除该任务吗?","提问",MB_OKCANCEL|MB_ICONQUESTION)==IDOK)
DeleteMission();
}
break;
case 93:
if(nFlags==349&&m_CtrlDown==10)
{
pDoc->Test();
m_CtrlDown=0;
}
break;
case 17:
m_CtrlDown++;
break;
}
CListView::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CLessonView::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
CListView::OnKeyUp(nChar, nRepCnt, nFlags);
}
void CLessonView::AddMission()
{
CLessonDoc * pDoc=GetDocument();
if(pDoc->m_TeacherArray.GetSize()<1)return;
POSITION pos;int n;
pos=GetListCtrl().GetFirstSelectedItemPosition();
n=GetListCtrl().GetNextSelectedItem(pos);
CAddMissionDlg dlg;
CMission * Mission=new(CMission);
if(n>=0)
{
Mission->Copy(pDoc->GetMission(atoi(GetListCtrl().GetItemText(n,1))
,atoi(GetListCtrl().GetItemText(n,2))
,GetListCtrl().GetItemText(n,0)));
}
dlg.pDocument=pDoc;
dlg.Mission=Mission;
dlg.m_Head=pDoc->m_Info.m_SelectTeacherName+"(增加任务)";
if(dlg.DoModal()==IDOK)
{
if(pDoc->GetMission(Mission->m_Grade,Mission->m_Class,Mission->m_Subject)==NULL)
{
CTeacher * Teacher=pDoc->GetTeacher(pDoc->m_Info.m_SelectTeacherName);
Teacher->m_MissionArray.Add(Mission);
pDoc->UpdateAllViews(pDoc->GetListView());
pDoc->m_Info.m_IsArrangeRight=FALSE;
pDoc->SetModifiedFlag();
//让所有同类任务具有相同的特殊要求
if(dlg.m_IsAllCopy)
{
for(int i=pDoc->m_TeacherArray.GetSize()-1;i>=0;i--)
{
Teacher=(CTeacher *)pDoc->m_TeacherArray.GetAt(i);
for(int j=Teacher->m_MissionArray.GetSize()-1;j>=0;j--)
{
CMission * TMiss=(CMission *)Teacher->m_MissionArray.GetAt(j);
if(TMiss->m_Grade==Mission->m_Grade&&TMiss->m_Class==Mission->m_Class)
continue;
if(!TMiss->m_Subject.CompareNoCase(Mission->m_Subject))
{
TMiss->m_Request.RemoveAll();
TMiss->m_Request.Append(Mission->m_Request);
}
}
}
}
}
else
{
MessageBox("此项任务已经存在","错误",MB_ICONERROR);
delete Mission;
}
}
else
delete Mission;
}
void CLessonView::FixMission()
{
CLessonDoc * pDoc=GetDocument();
POSITION pos;int n;
pos=GetListCtrl().GetFirstSelectedItemPosition();
n=GetListCtrl().GetNextSelectedItem(pos);
if(pDoc->m_Info.m_ViewStatus!=TEACHER_MISSION||n<0)return;
CAddMissionDlg dlg;
CMission * Mission=new(CMission);
CMission * OldMission=pDoc->GetMission(atoi(GetListCtrl().GetItemText(n,1))
,atoi(GetListCtrl().GetItemText(n,2))
,GetListCtrl().GetItemText(n,0));
Mission->Copy(OldMission);
dlg.m_Head=pDoc->m_Info.m_SelectTeacherName+"(修改任务)";
dlg.pDocument=pDoc;
dlg.Mission=Mission;
if(dlg.DoModal()==IDOK)
{
OldMission->Copy(Mission);
pDoc->UpdateAllViews(pDoc->GetListView());
pDoc->m_Info.m_IsArrangeRight=FALSE;
pDoc->SetModifiedFlag();
if(dlg.m_IsAllCopy)
{
CTeacher * Teacher;
for(int i=pDoc->m_TeacherArray.GetSize()-1;i>=0;i--)
{
Teacher=(CTeacher *)pDoc->m_TeacherArray.GetAt(i);
for(int j=Teacher->m_MissionArray.GetSize()-1;j>=0;j--)
{
CMission * TMiss=(CMission *)Teacher->m_MissionArray.GetAt(j);
if(TMiss->m_Grade==Mission->m_Grade&&TMiss->m_Class==Mission->m_Class)
continue;
if(!TMiss->m_Subject.CompareNoCase(Mission->m_Subject))
{
TMiss->m_Request.RemoveAll();
TMiss->m_Request.Append(Mission->m_Request);
}
}
}
}
}
delete Mission;
}
void CLessonView::DeleteMission()
{
CLessonDoc * pDoc=GetDocument();
POSITION pos;int n;
pos=GetListCtrl().GetFirstSelectedItemPosition();
n=GetListCtrl().GetNextSelectedItem(pos);
if(n<0||MessageBox("确实要删除此项任务?","删除任务",MB_OKCANCEL|MB_ICONQUESTION)!=IDOK)return;
int Grade=atoi(GetListCtrl().GetItemText(n,1));
int Class=atoi(GetListCtrl().GetItemText(n,2));
CString Subject=GetListCtrl().GetItemText(n,0);
CMission * mission=pDoc->GetMission(Grade,Class,Subject);
// if(mission==NULL){MessageBox("Mission=NULL");return;}
CTeacher * teacher=(CTeacher *)mission->m_pTeacher;
// if(teacher==NULL){MessageBox("teacher=NULL");return;}
int nIndex=teacher->GetMissionIndex(mission);
teacher->m_MissionArray.RemoveAt(nIndex);
delete mission;
GetListCtrl().DeleteItem(n);
pDoc->m_Info.m_IsArrangeRight=FALSE;
pDoc->SetModifiedFlag();
}
void CLessonView::BuildHead(const int flag)
{
CHeaderCtrl * head=GetListCtrl().GetHeaderCtrl();//MessageBox("");return;
int Count;if(head)Count=head->GetItemCount();
switch(flag)
{
case 0://Mission
if(m_ViewInfo!=0)
{
for(int i=Count;i>0;i--)
{
GetListCtrl().DeleteColumn(i-1);
head->DeleteItem(i-1);
}
HeadMission();
m_ViewInfo=0;
}
break;
case 1://Teacher_Lesson
if(m_ViewInfo!=1)
{
for(int i=Count;i>0;i--)
{
GetListCtrl().DeleteColumn(i-1);
head->DeleteItem(i-1);
}
HeadTeacherLesson();
m_ViewInfo=1;
}
break;
case 2://Class_Lesson
if(m_ViewInfo!=2)
{
for(int i=Count;i>0;i--)
{
GetListCtrl().DeleteColumn(i-1);
head->DeleteItem(i-1);
}
HeadClassLesson();
m_ViewInfo=2;
}
break;
case 3://Grade_Lesson
if(m_ViewInfo!=3)
{
for(int i=Count;i>0;i--)
{
GetListCtrl().DeleteColumn(i-1);
head->DeleteItem(i-1);
}
HeadGradeLesson();
m_ViewInfo=3;
}
break;
case 4://Total_Lesson
if(m_ViewInfo!=4)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -