📄 assigndlg.cpp
字号:
// AssignDlg.cpp : implementation file
//
#include "stdafx.h"
#include "gpmis.h"
#include "AssignDlg.h"
#include "global.h"
#include "teacher.h"
#include "student.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAssignDlg dialog
#define NUM1_COLUMNS 5
static _TCHAR *_gszLabel1[NUM1_COLUMNS] =
{
_T("教师"), _T("职称"), _T("本科生"), _T("二学位"), _T("指定")
};
static int _gnFmt1[NUM1_COLUMNS] =
{
LVCFMT_CENTER, LVCFMT_CENTER, LVCFMT_CENTER , LVCFMT_CENTER, LVCFMT_CENTER
};
static int _gnWidth1[NUM1_COLUMNS] =
{
60, 78, 64, 60, 200
};
CAssignDlg::CAssignDlg(CWnd* pParent /*=NULL*/)
: CDialog(CAssignDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CAssignDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CAssignDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAssignDlg)
DDX_Control(pDX, IDC_STUDENT_COMBO, m_cmbStudent);
DDX_Control(pDX, IDC_TEACHER_LIST, m_lvwTeacher);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAssignDlg, CDialog)
//{{AFX_MSG_MAP(CAssignDlg)
ON_NOTIFY(LVN_ENDLABELEDIT, IDC_TEACHER_LIST, OnEndlabeleditTeacherList)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_TEACHER_LIST, OnItemchangedTeacherList)
ON_BN_CLICKED(ID_SET, OnSet)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAssignDlg message handlers
BOOL CAssignDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
CStudentList& list = CGlobal::GetInstance().m_studentList;
POSITION pos = list.GetHeadPosition();
m_nUnderG = 0;
m_nSecondD = 0;
m_nSum = 0;
int i = 0;
while( pos )
{
CStudent* pStudent = list.GetNext(pos);
if( pStudent )
{
if( pStudent->GetClass().Find("二") >0 )
m_nSecondD++;
else
m_nUnderG++;
m_nSum++;
CString str;
str.Format("%s:%s", pStudent->GetClass(), pStudent->GetName());
m_cmbStudent.AddRow(i,str);
m_cmbStudent.SetCheck(i,FALSE);
i++;
}
}
int nColumnType[64];
nColumnType[0] = ELCT_STRING_CASE;
nColumnType[1] = ELCT_STRING_CASE;
nColumnType[2] = ELCT_INTEGER;
nColumnType[3] = ELCT_INTEGER;
nColumnType[4] = ELCT_STRING_CASE;
nColumnType[5] = ELCT_STRING_CASE;
m_lvwTeacher.SetColumnType(nColumnType);
BOOL bCanEdit[64];
bCanEdit[0] = FALSE;
bCanEdit[1] = FALSE;
bCanEdit[2] = TRUE;
bCanEdit[3] = TRUE;
bCanEdit[4] = FALSE;
bCanEdit[5] = FALSE;
m_lvwTeacher.SetCanEdit(bCanEdit);
int nColumnCtrl[64];
nColumnCtrl[0] = eLast;
nColumnCtrl[1] = eLast;
nColumnCtrl[2] = eEdit;
nColumnCtrl[3] = eEdit;
nColumnCtrl[4] = eLast;
nColumnCtrl[5] = eLast;
m_lvwTeacher.SetColumnCtrl(nColumnCtrl);
DrawLabel();
DrawList();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CAssignDlg::DrawLabel()
{
int i;
LV_COLUMN lvc;
// delete columns
int sum = NUM1_COLUMNS;
_TCHAR **szLabel = _gszLabel1;
int *nWidth = _gnWidth1;
int *nFmt = _gnFmt1;
for(i = 0; i<sum; i++)
{
m_lvwTeacher.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];
m_lvwTeacher.InsertColumn(i,&lvc);
}
m_lvwTeacher.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
// m_lvwTeacher.EnableToolTips(FALSE);
m_lvwTeacher.SetSortFirstCol(TRUE);
}
void CAssignDlg::DrawList()
{
LV_ITEM lvi;
int i = 0;
char cNum[100];
CString strName;
// delete list items
m_lvwTeacher.DeleteAllItems();
lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE;
lvi.iSubItem = 0;
lvi.iImage = 0;
lvi.stateMask = LVIS_STATEIMAGEMASK;
lvi.state = INDEXTOSTATEIMAGEMASK(1);
CTeacherList& teacherList = CGlobal::GetInstance().m_teacherList;
CTeacherList list;
POSITION pos = teacherList.GetHeadPosition();
POSITION HPos = NULL;
POSITION MPos = NULL;
while( pos )
{
CTeacher* pTeacher = teacherList.GetNext(pos);
if( pTeacher )
{
CString key, strLevel = "";
key.Format("%d", pTeacher->GetTitleID());
CGlobal::GetInstance().m_LevelMap.Lookup(key,strLevel);
if( strLevel == "高级" )
{
if( HPos == NULL )
list.AddHead(pTeacher);
else
list.InsertBefore(HPos, pTeacher);
}
else if( strLevel == "副高" )
{
if( MPos == NULL )
{
list.AddTail(pTeacher);
HPos = list.GetTailPosition();
}
else
list.InsertBefore(MPos, pTeacher);
}
else
{
list.AddTail(pTeacher);
if( MPos == NULL )
{
MPos = list.GetTailPosition();
}
}
}
}
int nNum = list.GetCount();
int nU1 = m_nUnderG/nNum;
int nU2 = m_nUnderG%nNum;
int nS1 = m_nSecondD/nNum;
int nS2 = m_nSecondD%nNum;
pos = list.GetHeadPosition();
while( pos )
{
CTeacher* pTeacher = list.GetNext(pos);
if( pTeacher )
{
sprintf(cNum,"%s",pTeacher->GetName());
lvi.iItem = i;
lvi.pszText = (LPTSTR)cNum;
m_lvwTeacher.InsertItem(&lvi);
CString strTemp;
strTemp.Format("%s",pTeacher->GetTitle(CGlobal::GetInstance().m_TitleMap));
m_lvwTeacher.SetItemText(i, 1, strTemp);
strTemp.Format("%d",nU1);
if( nU2 > 0 )
{
strTemp.Format("%d",nU1+1);
nU2--;
}
m_lvwTeacher.SetItemText(i, 2, strTemp);
strTemp.Format("%d",nS1);
if( nS2 > 0 )
{
strTemp.Format("%d",nS1+1);
nS2--;
}
m_lvwTeacher.SetItemText(i, 3, strTemp);
i++;
}
}
sprintf(cNum,"总计: ");
lvi.iItem = i;
lvi.pszText = (LPTSTR)cNum;
m_lvwTeacher.InsertItem(&lvi);
CString strTemp;
strTemp.Format("%d/%d",m_nUnderG, m_nUnderG);
m_lvwTeacher.SetItemText(i, 2, strTemp);
strTemp.Format("%d/%d",m_nSecondD, m_nSecondD);
m_lvwTeacher.SetItemText(i, 3, strTemp);
m_lvwTeacher.SetDisableRow(i,i);
m_lvwTeacher.SetItemState(0,LVIS_FOCUSED|LVIS_SELECTED,LVIS_FOCUSED|LVIS_SELECTED);
}
void CAssignDlg::OnEndlabeleditTeacherList(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
LV_DISPINFO *plvDispInfo = (LV_DISPINFO *)pNMHDR;
LV_ITEM *plvItem = &plvDispInfo->item;
if( plvItem->iSubItem == 2 && plvItem->pszText != NULL )
{
int nUnderG = 0;
for(int i = 0; i < m_lvwTeacher.GetItemCount() - 1; i++ )
{
nUnderG += atoi(m_lvwTeacher.GetItemText(i, 2));
}
CString strTemp;
strTemp.Format("%d/%d",nUnderG, m_nUnderG);
m_lvwTeacher.SetItemText(i, 2, strTemp);
}
else if( plvItem->iSubItem == 3 && plvItem->pszText != NULL )
{
}
*pResult = 0;
}
void CAssignDlg::OnItemchangedTeacherList(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
LV_DISPINFO *plvDispInfo = (LV_DISPINFO *)pNMHDR;
LV_ITEM *plvItem = &plvDispInfo->item;
int nUnderG = 0;
for(int i = 0; i < m_lvwTeacher.GetItemCount() - 1; i++ )
{
nUnderG += atoi(m_lvwTeacher.GetItemText(i, 2));
}
CString strTemp;
strTemp.Format("%d/%d",nUnderG, m_nUnderG);
m_lvwTeacher.SetItemText(i, 2, strTemp);
*pResult = 0;
}
void CAssignDlg::OnSet()
{
// TODO: Add your control notification handler code here
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -