www.pudn.com > 个人考勤软件开发实例配套代码.zip > ChildView.cpp


// ChildView.cpp : implementation of the CChildView class 
// 
 
#include "stdafx.h" 
//#include "Preview.h" 
#include "attendance.h" 
#include "ChildView.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
IMPLEMENT_DYNCREATE(CChildView, CWrapperView) 
 
///////////////////////////////////////////////////////////////////////////// 
// CChildView 
 
CChildView::CChildView() 
{ 
} 
 
CChildView::~CChildView() 
{ 
} 
 
 
BEGIN_MESSAGE_MAP(CChildView,CWrapperView) 
	//{{AFX_MSG_MAP(CChildView) 
	ON_WM_PAINT() 
	ON_COMMAND(ID_FILE_PRINT, OnFilePrint) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
 
///////////////////////////////////////////////////////////////////////////// 
// CChildView message handlers 
 
BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs)  
{ 
	if (!CWnd::PreCreateWindow(cs)) 
		return FALSE; 
 
	cs.dwExStyle |= WS_EX_CLIENTEDGE; 
	cs.style &= ~WS_BORDER; 
	cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS,  
		::LoadCursor(NULL, IDC_ARROW), HBRUSH(COLOR_WINDOW+1), NULL); 
 
	return TRUE; 
} 
 
void CChildView::OnPaint()  
{ 
	CPaintDC dc(this); // device context for painting 
	 
	OnDraw(&dc); 
 
	// Do not call CWnd::OnPaint() for painting messages 
} 
 
 
void CChildView::OnDraw(CDC* pDC)  
{ 
 	CAttendanceApp* app=(CAttendanceApp*)AfxGetApp(); 
	CRect rectClient; 
	TEXTMETRIC tm; 
	pDC->GetTextMetrics(&tm); 
	int	cw=tm.tmMaxCharWidth; 
	int	ch=tm.tmHeight; 
	bool bl=pDC->IsPrinting(); 
	if(bl)//pDC->IsPrinting() 
	{ 
		pDC->SetMapMode(MM_TEXT); 
		SIZE CurOrg; 
		CurOrg.cx=app->m_pMiddle->m_iLeft*100; 
		CurOrg.cy=app->m_pMiddle->m_iTop*100; 
 
		//打印区域的宽度和高度 
		SIZE CurRegion; 
		CurRegion.cx=app->m_pMiddle->m_iRight*100; 
		CurRegion.cy=app->m_pMiddle->m_iBottom*100; 
		pDC->HIMETRICtoDP(&CurOrg); 
		pDC->HIMETRICtoDP(&CurRegion); 
		CurRegion.cx=pDC->GetDeviceCaps(HORZRES)-CurRegion.cx; 
		CurRegion.cy=pDC->GetDeviceCaps(VERTRES)-CurRegion.cy; 
		CFont ft,*pOldFont; 
		LOGFONT lf; 
		char* chr; 
		CString s; 
		CSize size; 
		CRect rect; 
		int	i; 
		int year; 
		int mth; 
		int monthday; 
		int j; 
		double fctwks; 
		int day; 
		int wk; 
		int	wks; 
		CBrush Brugreen; 
		Brugreen.CreateSolidBrush(RGB(0,0,0)); 
		if(app->m_pMiddle->m_iPrtSel==0 || app->m_pMiddle->m_iPrtSel==1) 
		{ 
			rect.SetRect(CurOrg.cx,CurOrg.cy,CurRegion.cx,CurRegion.cy); 
			CRgn rgn; 
			rgn.CreateRectRgnIndirect(&rect); 
			pDC->FrameRgn(&rgn,&Brugreen,5,5); 
			rgn.DeleteObject(); 
			::GetObject(GetCurrentObject(pDC->GetSafeHdc(),OBJ_FONT),sizeof(LOGFONT),&lf); 
			lf.lfHeight=ch*30/16;//17/16 
			lf.lfWidth=cw*26/25; 
			lf.lfWeight=FW_BLACK; 
 
			ft.CreateFontIndirect(&lf); 
			pOldFont=pDC->SelectObject(&ft); 
			chr = s.GetBuffer(20); 
			app->m_pMiddle->m_cMonth.GetWindowText(chr,20); 
			s=chr; 
			//size=pDC->GetOutputTabbedTextExtent(s,0,NULL); 
			size=pDC->GetOutputTextExtent(s); 
			pDC->SetTextAlign(TA_CENTER);//TA_LEFT 
			pDC->TextOut((CurOrg.cx+CurRegion.cx)/2,CurOrg.cy-size.cy/2,s); 
//			pDC->TextOut(CurOrg.cx+2*cw,CurOrg.cy+ch,s);// 
 
			pDC->SetTextAlign(TA_LEFT); 
			pDC->SelectObject(pOldFont); 
			ft.DeleteObject(); 
			year = app->m_pMiddle->sAttend[0].tAmOnDuty.GetYear(); 
			mth = app->m_pMiddle->sAttend[0].tAmOnDuty.GetMonth(); 
			monthday=MonthDay[mth-1]; 
			if(mth==2 && fmod(year,4)==0) 
				monthday++; 
 
			fctwks = 0; 
			for(j=0;j<=app->m_pMiddle->m_iCurItem;j++) 
			{ 
				app->m_pMiddle->sAttend[j].tWork = app->m_pMiddle->sAttend[j].tAmOffDuty-app->m_pMiddle->sAttend[j].tAmOnDuty; 
				app->m_pMiddle->sAttend[j].tWork += app->m_pMiddle->sAttend[j].tPmOffDuty-app->m_pMiddle->sAttend[j].tPmOnDuty; 
				app->m_pMiddle->sAttend[j].tWork += app->m_pMiddle->sAttend[j].tNinOffDuty-app->m_pMiddle->sAttend[j].tNinOnDuty; 
				fctwks += (double)app->m_pMiddle->sAttend[j].tWork.GetHours()+(double)app->m_pMiddle->sAttend[j].tWork.GetMinutes()/60.0; 
			} 
			s.Format("本月法定工作日:  %d天",monthday-app->m_pMiddle->m_iHoliday); 
			pDC->TextOut(CurOrg.cx+4*cw,CurOrg.cy+ch,s);//size.cy 
//			pDC->TextOut(CurOrg.cx+size.cx+4*cw,CurOrg.cy+ch,s); 
			s.Format("本月全勤工资:%6d元",app->m_pMiddle->m_iPay); 
//			pDC->TextOut((CurOrg.cx+CurRegion.cx)/2+6*cw,CurOrg.cy+ch,s);//size.cy 
			pDC->TextOut(CurRegion.cx-16*cw,CurOrg.cy+ch,s); 
			fctwks /=8.0; 
			fctwks = floor(fctwks*10.0)/10.0; 
			s.Format("本月实际出勤:   %.1f天",fctwks); 
			pDC->TextOut(CurOrg.cx+4*cw,CurOrg.cy+ch*2,s);//size.cy*2 
//			pDC->TextOut(CurOrg.cx+size.cx+4*cw,CurOrg.cy+ch*2,s); 
			s.Format("本月出勤工资:%6d元",app->m_pMiddle->m_iObtain); 
//			pDC->TextOut((CurOrg.cx+CurRegion.cx)/2+6*cw,CurOrg.cy+ch*2,s);//size.cy*2 
			pDC->TextOut(CurRegion.cx-16*cw,CurOrg.cy+ch*2,s); 
 
			int day = app->m_pMiddle->sAttend[0].tAmOnDuty.GetDay(); 
			int wk = app->m_pMiddle->sAttend[0].tAmOnDuty.GetDayOfWeek();//1..7 
			int	wks = day/7; 
			int surplus = fmod(day-1,7);//0..6 
 
			int wk1 = surplus>=wk ? wk+7-surplus : wk-surplus; 
 
			pDC->SetTextAlign(TA_CENTER); 
			s="日期"; 
			pDC->TextOut(CurOrg.cx+3*cw,CurOrg.cy+ch*3,s); 
			s="星期"; 
			pDC->TextOut(CurOrg.cx+6*cw,CurOrg.cy+ch*3,s); 
			s="休?"; 
			pDC->TextOut(CurOrg.cx+19*cw/2,CurOrg.cy+ch*3,s); 
			s="Am 点到"; 
			pDC->TextOut(CurOrg.cx+13*cw,CurOrg.cy+ch*3,s); 
			s="午饭"; 
			pDC->TextOut(CurOrg.cx+17*cw,CurOrg.cy+ch*3,s); 
			s="Pm 点到"; 
			pDC->TextOut(CurOrg.cx+21*cw,CurOrg.cy+ch*3,s); 
			s="下班"; 
			pDC->TextOut(CurOrg.cx+25*cw,CurOrg.cy+ch*3,s); 
			s="晚间工作"; 
			pDC->TextOut(CurOrg.cx+59*cw/2,CurOrg.cy+ch*3,s); 
			s="准备就寝"; 
			pDC->TextOut(CurOrg.cx+69*cw/2,CurOrg.cy+ch*3,s); 
			s="日工时"; 
			pDC->TextOut((CurOrg.cx+37*cw+CurRegion.cx-2*cw)/2,CurOrg.cy+ch*3,s); 
			for(i=1;i<=monthday;i++) 
			{ 
				s.Format("%d",i); 
				pDC->TextOut(CurOrg.cx+3*cw,CurOrg.cy+ch*(3+i),s); 
 
				wk = wk1+fmod(i-1,7); 
				if(wk>7) wk-=7; 
				s=WeekTable[wk-1]; 
				pDC->TextOut(CurOrg.cx+6*cw,CurOrg.cy+ch*(3+i),s); 
 
				for(j=0;jm_pMiddle->m_iHoliday && app->m_pMiddle->m_ArrayHoliday[j]!=i;j++); 
				if(jm_pMiddle->m_iHoliday) 
				{ 
					s="公休"; 
					pDC->TextOut(CurOrg.cx+19*cw/2,CurOrg.cy+ch*(3+i),s); 
				} 
				for(j=0;j<=app->m_pMiddle->m_iCurItem && app->m_pMiddle->sAttend[j].tAmOnDuty.GetDay()!=i;j++); 
				if(j<=app->m_pMiddle->m_iCurItem) 
				{ 
					if(app->m_pMiddle->sAttend[j].tAmOnDuty!=app->m_pMiddle->sAttend[j].tAmOffDuty) 
					{ 
						s=app->m_pMiddle->sAttend[j].tAmOnDuty.Format("%H:%M"); 
						pDC->TextOut(CurOrg.cx+13*cw,CurOrg.cy+ch*(3+i),s); 
 
						s=app->m_pMiddle->sAttend[j].tAmOffDuty.Format("%H:%M"); 
						pDC->TextOut(CurOrg.cx+17*cw,CurOrg.cy+ch*(3+i),s); 
					} 
 
					if(app->m_pMiddle->sAttend[j].tPmOnDuty!=app->m_pMiddle->sAttend[j].tPmOffDuty) 
					{ 
						s=app->m_pMiddle->sAttend[j].tPmOnDuty.Format("%H:%M"); 
						pDC->TextOut(CurOrg.cx+21*cw,CurOrg.cy+ch*(3+i),s); 
 
						s=app->m_pMiddle->sAttend[j].tPmOffDuty.Format("%H:%M"); 
						pDC->TextOut(CurOrg.cx+25*cw,CurOrg.cy+ch*(3+i),s); 
					} 
 
					if(app->m_pMiddle->sAttend[j].tNinOnDuty!=app->m_pMiddle->sAttend[j].tNinOffDuty) 
					{ 
						s=app->m_pMiddle->sAttend[j].tNinOnDuty.Format("%H:%M"); 
						pDC->TextOut(CurOrg.cx+59*cw/2,CurOrg.cy+ch*(3+i),s); 
 
						s=app->m_pMiddle->sAttend[j].tNinOffDuty.Format("%H:%M"); 
						pDC->TextOut(CurOrg.cx+69*cw/2,CurOrg.cy+ch*(3+i),s); 
					} 
 
					if(app->m_pMiddle->sAttend[j].tWork!=0) 
					{ 
						s=app->m_pMiddle->sAttend[j].tWork.Format("%H:%M"); 
						pDC->TextOut((CurOrg.cx+37*cw+CurRegion.cx-2*cw)/2,CurOrg.cy+ch*(3+i),s); 
					} 
				} 
			} 
 
			for(i=0;i<=monthday+1 && CurOrg.cy+ch*(3+i)<=CurRegion.cy;i++) 
			{ 
				pDC->MoveTo(CurOrg.cx+2*cw,CurOrg.cy+ch*(3+i)); 
				pDC->LineTo(CurRegion.cx-2*cw,CurOrg.cy+ch*(3+i)); 
			} 
			pDC->MoveTo(CurOrg.cx+2*cw,CurOrg.cy+ch*3); 
			pDC->LineTo(CurOrg.cx+2*cw,CurOrg.cy+ch*(3+monthday+1)); 
			pDC->MoveTo(CurRegion.cx-2*cw,CurOrg.cy+ch*3); 
			pDC->LineTo(CurRegion.cx-2*cw,CurOrg.cy+ch*(3+monthday+1)); 
 
			pDC->MoveTo(CurOrg.cx+4*cw,CurOrg.cy+ch*3); 
			pDC->LineTo(CurOrg.cx+4*cw,CurOrg.cy+ch*(3+monthday+1)); 
			pDC->MoveTo(CurOrg.cx+8*cw,CurOrg.cy+ch*3); 
			pDC->LineTo(CurOrg.cx+8*cw,CurOrg.cy+ch*(3+monthday+1)); 
			pDC->MoveTo(CurOrg.cx+11*cw,CurOrg.cy+ch*3); 
			pDC->LineTo(CurOrg.cx+11*cw,CurOrg.cy+ch*(3+monthday+1)); 
			pDC->MoveTo(CurOrg.cx+15*cw,CurOrg.cy+ch*3); 
			pDC->LineTo(CurOrg.cx+15*cw,CurOrg.cy+ch*(3+monthday+1)); 
			pDC->MoveTo(CurOrg.cx+19*cw-1,CurOrg.cy+ch*3); 
			pDC->LineTo(CurOrg.cx+19*cw-1,CurOrg.cy+ch*(3+monthday+1)); 
			pDC->MoveTo(CurOrg.cx+23*cw+1,CurOrg.cy+ch*3); 
			pDC->LineTo(CurOrg.cx+23*cw+1,CurOrg.cy+ch*(3+monthday+1)); 
			pDC->MoveTo(CurOrg.cx+27*cw,CurOrg.cy+ch*3); 
			pDC->LineTo(CurOrg.cx+27*cw,CurOrg.cy+ch*(3+monthday+1)); 
			pDC->MoveTo(CurOrg.cx+32*cw,CurOrg.cy+ch*3); 
			pDC->LineTo(CurOrg.cx+32*cw,CurOrg.cy+ch*(3+monthday+1)); 
			pDC->MoveTo(CurOrg.cx+37*cw,CurOrg.cy+ch*3); 
			pDC->LineTo(CurOrg.cx+37*cw,CurOrg.cy+ch*(3+monthday+1)); 
			//pDC->MoveTo(CurOrg.cx+39*cw,CurOrg.cy+size.cy*3); 
			//pDC->LineTo(CurOrg.cx+39*cw,CurOrg.cy+size.cy*(3+monthday+1)); 
 
		} 
		if(app->m_pMiddle->m_iPrtSel == 2) 
		{ 
			CurOrg.cy=1; 
			int	cy=CurOrg.cy; 
			CurRegion.cy=pDC->GetDeviceCaps(VERTRES); 
			HDC hdc=pDC->GetSafeHdc(); 
			int iMonths=app->m_pMiddle->m_iMonths; 
			int pageHeight=pDC->GetDeviceCaps(VERTRES); 
			for(int	k=0;k<=iMonths;k++)//1 
			{ 
				::GetObject(GetCurrentObject(pDC->GetSafeHdc(),OBJ_FONT),sizeof(LOGFONT),&lf); 
				lf.lfHeight=ch*30/16; 
				lf.lfWidth=cw*26/25; 
				lf.lfWeight=FW_BLACK; 
 
				ft.CreateFontIndirect(&lf); 
				pOldFont=pDC->SelectObject(&ft); 
				struct YearTotal sYearTotal = app->m_pMiddle->sYearTotal[k];//m_nCurPage+ 
				int	iDays = sYearTotal.iDayItems; 
 
				s.Format("%d年%2d月份月报 ", sYearTotal.sAttend[0].tAmOnDuty.GetYear(),sYearTotal.sAttend[0].tAmOnDuty.GetMonth());//,sYearTotal[k].sAttend[0].tAmOnDuty.GetDay()); 
				//size=pDC->GetOutputTabbedTextExtent(s,0,NULL); 
				size=pDC->GetOutputTextExtent(s); 
				pDC->SetTextAlign(TA_LEFT);//TA_CENTER 
//				pDC->TextOut((CurOrg.cx+CurRegion.cx)/2,CurOrg.cy-size.cy/2,s); 
				pDC->TextOut(CurOrg.cx+2*cw,CurOrg.cy,s);//+ch 
 
				pDC->SetTextAlign(TA_LEFT); 
				pDC->SelectObject(pOldFont); 
				ft.DeleteObject(); 
				year = sYearTotal.sAttend[0].tAmOnDuty.GetYear(); 
				mth = sYearTotal.sAttend[0].tAmOnDuty.GetMonth(); 
				monthday=MonthDay[mth-1]; 
				if(mth==2 && fmod(year,4)==0) 
					monthday++; 
 
				fctwks = 0; 
				for(j=0;j<=iDays;j++) 
				{ 
					sYearTotal.sAttend[j].tWork = sYearTotal.sAttend[j].tAmOffDuty-sYearTotal.sAttend[j].tAmOnDuty; 
					sYearTotal.sAttend[j].tWork += sYearTotal.sAttend[j].tPmOffDuty-sYearTotal.sAttend[j].tPmOnDuty; 
					sYearTotal.sAttend[j].tWork += sYearTotal.sAttend[j].tNinOffDuty-sYearTotal.sAttend[j].tNinOnDuty; 
					fctwks += (double)sYearTotal.sAttend[j].tWork.GetHours()+(double)sYearTotal.sAttend[j].tWork.GetMinutes()/60.0; 
				} 
				int	iWorkDays = monthday-sYearTotal.iHoliday; 
				s.Format("本月法定工作日:  %d天",iWorkDays); 
//				pDC->TextOut(CurOrg.cx+2*cw,CurOrg.cy+size.cy,s); 
				pDC->TextOut(CurOrg.cx+size.cx+4*cw,CurOrg.cy,s);//+ch 
				s.Format("本月全勤工资:%6d元",sYearTotal.iPay); 
//				pDC->TextOut((CurOrg.cx+CurRegion.cx)/2+2*cw,CurOrg.cy+size.cy,s); 
				pDC->TextOut(CurRegion.cx-12*cw,CurOrg.cy,s);//+ch 
				fctwks /=8.0; 
				fctwks = floor(fctwks*10.0)/10.0; 
				s.Format("本月实际出勤:   %.1f天",fctwks); 
//				pDC->TextOut(CurOrg.cx+2*cw,CurOrg.cy+size.cy*2,s); 
				pDC->TextOut(CurOrg.cx+size.cx+4*cw,CurOrg.cy+ch*1,s); 
 
//				int	iWorkDays = monthday-sYearTotal.iHoliday; 
//?				double dDayPay = int(((double)sYearTotal.iPay/(double)iWorkDays)*100.0+0.5)/100.0; 
//				fctwks /=8.0; 
				fctwks=floor(fctwks*10.0)/10.0; 
				int iObtain = double(sYearTotal.iPay)*fctwks/double(iWorkDays); 
//				int	iObtain=fctwks*dDayPay; 
				s.Format("本月出勤工资:%6d元",iObtain); 
//				pDC->TextOut((CurOrg.cx+CurRegion.cx)/2+2*cw,CurOrg.cy+size.cy*2,s); 
				pDC->TextOut(CurRegion.cx-12*cw,CurOrg.cy+ch*1,s); 
 
				int day = sYearTotal.sAttend[0].tAmOnDuty.GetDay(); 
				int wk = sYearTotal.sAttend[0].tAmOnDuty.GetDayOfWeek();//1..7 
				int	wks = day/7; 
				int surplus = fmod(day-1,7);//0..6 
 
				int wk1 = surplus>=wk ? wk+7-surplus : wk-surplus; 
 
				pDC->SetTextAlign(TA_CENTER); 
				s="日期"; 
				pDC->TextOut(CurOrg.cx+3*cw,CurOrg.cy+ch*2,s); 
				s="星期"; 
				pDC->TextOut(CurOrg.cx+6*cw,CurOrg.cy+ch*2,s); 
				s="休?"; 
				pDC->TextOut(CurOrg.cx+19*cw/2,CurOrg.cy+ch*2,s); 
				s="Am 点到"; 
				pDC->TextOut(CurOrg.cx+13*cw,CurOrg.cy+ch*2,s); 
				s="午饭"; 
				pDC->TextOut(CurOrg.cx+17*cw,CurOrg.cy+ch*2,s); 
				s="Pm 点到"; 
				pDC->TextOut(CurOrg.cx+21*cw,CurOrg.cy+ch*2,s); 
				s="下班"; 
				pDC->TextOut(CurOrg.cx+25*cw,CurOrg.cy+ch*2,s); 
				s="晚间工作"; 
				pDC->TextOut(CurOrg.cx+59*cw/2,CurOrg.cy+ch*2,s); 
				s="准备就寝"; 
				pDC->TextOut(CurOrg.cx+69*cw/2,CurOrg.cy+ch*2,s); 
				s="日工时"; 
				pDC->TextOut((CurOrg.cx+37*cw+CurRegion.cx-2*cw)/2,CurOrg.cy+ch*2,s); 
				for(i=1;i<=monthday;i++) 
				{ 
					s.Format("%d",i); 
					pDC->TextOut(CurOrg.cx+3*cw,CurOrg.cy+ch*(2+i),s); 
 
					wk = wk1+fmod(i-1,7); 
					if(wk>7) wk-=7; 
					s=WeekTable[wk-1]; 
					pDC->TextOut(CurOrg.cx+6*cw,CurOrg.cy+ch*(2+i),s); 
 
					for(j=0;jTextOut(CurOrg.cx+19*cw/2,CurOrg.cy+ch*(2+i),s); 
					} 
					for(j=0;j<=sYearTotal.iDayItems && sYearTotal.sAttend[j].tAmOnDuty.GetDay()!=i;j++); 
					if(j<=sYearTotal.iDayItems) 
					{ 
						if(sYearTotal.sAttend[j].tAmOnDuty!=sYearTotal.sAttend[j].tAmOffDuty) 
						{ 
							s=sYearTotal.sAttend[j].tAmOnDuty.Format("%H:%M"); 
							pDC->TextOut(CurOrg.cx+13*cw,CurOrg.cy+ch*(2+i),s); 
 
							s=sYearTotal.sAttend[j].tAmOffDuty.Format("%H:%M"); 
							pDC->TextOut(CurOrg.cx+17*cw,CurOrg.cy+ch*(2+i),s); 
						} 
 
						if(sYearTotal.sAttend[j].tPmOnDuty!=sYearTotal.sAttend[j].tPmOffDuty) 
						{ 
							s=sYearTotal.sAttend[j].tPmOnDuty.Format("%H:%M"); 
							pDC->TextOut(CurOrg.cx+21*cw,CurOrg.cy+ch*(2+i),s); 
 
							s=sYearTotal.sAttend[j].tPmOffDuty.Format("%H:%M"); 
							pDC->TextOut(CurOrg.cx+25*cw,CurOrg.cy+ch*(2+i),s); 
						} 
 
						if(sYearTotal.sAttend[j].tNinOnDuty!=sYearTotal.sAttend[j].tNinOffDuty) 
						{ 
							s=sYearTotal.sAttend[j].tNinOnDuty.Format("%H:%M"); 
							pDC->TextOut(CurOrg.cx+59*cw/2,CurOrg.cy+ch*(2+i),s); 
 
							s=sYearTotal.sAttend[j].tNinOffDuty.Format("%H:%M"); 
							pDC->TextOut(CurOrg.cx+69*cw/2,CurOrg.cy+ch*(2+i),s); 
						} 
 
						if(sYearTotal.sAttend[j].tWork!=0) 
						{ 
							s=sYearTotal.sAttend[j].tWork.Format("%H:%M"); 
							pDC->TextOut((CurOrg.cx+37*cw+CurRegion.cx-2*cw)/2,CurOrg.cy+ch*(2+i),s); 
						} 
					} 
				} 
 
				RECT rct; 
				UINT U=pDC->GetBoundsRect(&rct,DCB_RESET); 
				for(i=0;i<=monthday+1 && CurOrg.cy+ch*(2+i)<=CurRegion.cy;i++) 
				{ 
					pDC->MoveTo(CurOrg.cx+2*cw,CurOrg.cy+ch*(2+i)); 
					pDC->LineTo(CurRegion.cx-2*cw,CurOrg.cy+ch*(2+i)); 
				} 
				{ 
				pDC->MoveTo(CurOrg.cx+2*cw,CurOrg.cy+ch*2); 
				pDC->LineTo(CurOrg.cx+2*cw,CurOrg.cy+ch*(2+monthday+1)); 
				pDC->MoveTo(CurRegion.cx-2*cw,CurOrg.cy+ch*2); 
				pDC->LineTo(CurRegion.cx-2*cw,CurOrg.cy+ch*(2+monthday+1)); 
 
				pDC->MoveTo(CurOrg.cx+4*cw,CurOrg.cy+ch*2); 
				pDC->LineTo(CurOrg.cx+4*cw,CurOrg.cy+ch*(2+monthday+1)); 
				pDC->MoveTo(CurOrg.cx+8*cw,CurOrg.cy+ch*2); 
				pDC->LineTo(CurOrg.cx+8*cw,CurOrg.cy+ch*(2+monthday+1)); 
				pDC->MoveTo(CurOrg.cx+11*cw,CurOrg.cy+ch*2); 
				pDC->LineTo(CurOrg.cx+11*cw,CurOrg.cy+ch*(2+monthday+1)); 
				pDC->MoveTo(CurOrg.cx+15*cw,CurOrg.cy+ch*2); 
				pDC->LineTo(CurOrg.cx+15*cw,CurOrg.cy+ch*(2+monthday+1)); 
				pDC->MoveTo(CurOrg.cx+19*cw-1,CurOrg.cy+ch*2); 
				pDC->LineTo(CurOrg.cx+19*cw-1,CurOrg.cy+ch*(2+monthday+1)); 
				pDC->MoveTo(CurOrg.cx+23*cw+1,CurOrg.cy+ch*2); 
				pDC->LineTo(CurOrg.cx+23*cw+1,CurOrg.cy+ch*(2+monthday+1)); 
				pDC->MoveTo(CurOrg.cx+27*cw,CurOrg.cy+ch*2); 
				pDC->LineTo(CurOrg.cx+27*cw,CurOrg.cy+ch*(2+monthday+1)); 
				pDC->MoveTo(CurOrg.cx+32*cw,CurOrg.cy+ch*2); 
				pDC->LineTo(CurOrg.cx+32*cw,CurOrg.cy+ch*(2+monthday+1)); 
				pDC->MoveTo(CurOrg.cx+37*cw,CurOrg.cy+ch*2); 
				pDC->LineTo(CurOrg.cx+37*cw,CurOrg.cy+ch*(2+monthday+1)); 
				} 
				//pDC->MoveTo(CurOrg.cx+39*cw,CurOrg.cy+size.cy*3); 
				//pDC->LineTo(CurOrg.cx+39*cw,CurOrg.cy+size.cy*(3+monthday+1)); 
//				pDC->EndPage(); 
//				CurOrg.cy+=pageHeight/2; 
 
				if(fmod(k,2.0)<0.3) 
				{ 
				CurOrg.cy+=pageHeight/2; 
//				cy+=pageHeight/2; 
				} 
				else 
				{ 
				CurOrg.cy+=pageHeight*1/2; 
				CurRegion.cy+=pageHeight; 
//				cy+=pageHeight*1/2; 
//				CurRegion.cy+=pageHeight; 
				} 
//				m=pDC->EndPage(); 
			} 
/*				m_nCurPage++; 
				if(m_nCurPagem_pMiddle->m_iPrtSel == 1) || (app->m_pMiddle->m_iPrtSel == 2)) 
		{ 
			int t=pDC->GetDeviceCaps(VERTRES); 
			ft.CreateFontIndirect(&lf); 
			pDC->SelectObject(&ft); 
			chr = s.GetBuffer(20); 
			app->m_pMiddle->m_cYear.GetWindowText(chr,20); 
			s=chr; 
			pDC->TextOut((CurOrg.cx+CurRegion.cx)/2,CurOrg.cy+ch*(4+i),s); 
			pDC->SelectObject(pOldFont); 
			ft.DeleteObject(); 
 
			s="月份"; 
			pDC->TextOut(CurOrg.cx+7*cw/2,CurOrg.cy+ch*(6+i),s); 
			s="法定工作日"; 
			pDC->TextOut(CurOrg.cx+17*cw/2,CurOrg.cy+ch*(6+i),s); 
			s="全勤工资"; 
			pDC->TextOut(CurOrg.cx+16*cw,CurOrg.cy+ch*(6+i),s); 
			s="实际出勤日"; 
			pDC->TextOut(CurOrg.cx+24*cw,CurOrg.cy+ch*(6+i),s); 
			s="出勤工资"; 
			pDC->TextOut(CurOrg.cx+32*cw,CurOrg.cy+ch*(6+i),s); 
			s="实发工资"; 
			pDC->TextOut(CurOrg.cx+40*cw,CurOrg.cy+ch*(6+i),s); 
 
			int iMonths=app->m_pMiddle->m_iMonths; 
 
			int	workstotal = 0; 
			double paytotal = 0; 
			double fctwkstotal = 0; 
			double	Obtaintotal = 0; 
			double	fctpaytotal = 0; 
			for(int k=0;k<=iMonths;k++) 
			{ 
				mth = app->m_pMiddle->sYearTotal[k].sAttend[0].tAmOnDuty.GetMonth(); 
				s.Format("%d月",mth); 
				pDC->TextOut(CurOrg.cx+7*cw/2,CurOrg.cy+ch*(7+i+k),s); 
 
				monthday=MonthDay[mth-1]; 
				if(mth==2 && fmod(year,4)==0) 
					monthday++; 
				int workday=monthday-app->m_pMiddle->sYearTotal[k].iHoliday; 
				workstotal+=workday; 
				s.Format("%d天",workday); 
				pDC->TextOut(CurOrg.cx+8*cw,CurOrg.cy+ch*(7+i+k),s); 
				s.Format("%d元",app->m_pMiddle->sYearTotal[k].iPay); 
				paytotal+=app->m_pMiddle->sYearTotal[k].iPay; 
				int t=CurOrg.cy+ch*(7+i+k); 
				pDC->TextOut(CurOrg.cx+16*cw,CurOrg.cy+ch*(7+i+k),s); 
				fctwks=0; 
				for(j=0;j<=app->m_pMiddle->sYearTotal[k].iDayItems;j++) 
				{ 
					app->m_pMiddle->sYearTotal[k].sAttend[j].tWork = app->m_pMiddle->sYearTotal[k].sAttend[j].tAmOffDuty-app->m_pMiddle->sYearTotal[k].sAttend[j].tAmOnDuty; 
					app->m_pMiddle->sYearTotal[k].sAttend[j].tWork += app->m_pMiddle->sYearTotal[k].sAttend[j].tPmOffDuty-app->m_pMiddle->sYearTotal[k].sAttend[j].tPmOnDuty; 
					app->m_pMiddle->sYearTotal[k].sAttend[j].tWork += app->m_pMiddle->sYearTotal[k].sAttend[j].tNinOffDuty-app->m_pMiddle->sYearTotal[k].sAttend[j].tNinOnDuty; 
					fctwks += (double)app->m_pMiddle->sYearTotal[k].sAttend[j].tWork.GetHours()+(double)app->m_pMiddle->sYearTotal[k].sAttend[j].tWork.GetMinutes()/60.0; 
				} 
				fctwks /=8.0; 
				fctwks=floor(fctwks*10.0)/10.0; 
				fctwkstotal += fctwks; 
				s.Format("%.1f天",fctwks); 
				pDC->TextOut(CurOrg.cx+24*cw,CurOrg.cy+ch*(7+i+k),s); 
				int iObtain=double(app->m_pMiddle->sYearTotal[k].iPay)*fctwks/double(workday); 
//				iObtain = floor(iObtain); 
				Obtaintotal += iObtain; 
				s.Format("%4d元",iObtain); 
				pDC->TextOut(CurOrg.cx+32*cw,CurOrg.cy+ch*(7+i+k),s); 
				fctpaytotal+=app->m_pMiddle->sYearTotal[k].iFactPay; 
				s.Format("%4d元",app->m_pMiddle->sYearTotal[k].iFactPay); 
				pDC->TextOut(CurOrg.cx+40*cw,CurOrg.cy+ch*(7+i+k),s); 
 
			} 
			int pageHeight=pDC->GetDeviceCaps(VERTRES); 
			t=pDC->GetDeviceCaps(VERTRES); 
			s = "总计"; 
			pDC->TextOut(CurOrg.cx+7*cw/2,CurOrg.cy+ch*(7+i+k),s); 
 
			s.Format("%d天",workstotal); 
			pDC->TextOut(CurOrg.cx+8*cw,CurOrg.cy+ch*(7+i+k),s); 
			s.Format("%.0f元",paytotal); 
			pDC->TextOut(CurOrg.cx+16*cw,CurOrg.cy+ch*(7+i+k),s); 
			s.Format("%.1f天",fctwkstotal); 
			pDC->TextOut(CurOrg.cx+24*cw,CurOrg.cy+ch*(7+i+k),s); 
			s.Format("%5.0f元",Obtaintotal); 
			pDC->TextOut(CurOrg.cx+32*cw,CurOrg.cy+ch*(7+i+k),s); 
			s.Format("%5.0f元",fctpaytotal); 
			pDC->TextOut(CurOrg.cx+40*cw,CurOrg.cy+ch*(7+i+k),s); 
 
			for(j=0;j<=iMonths+3 && CurOrg.cy+ch*(6+i+j)<=CurRegion.cy;j++) 
			{ 
				pDC->MoveTo(CurOrg.cx+2*cw,CurOrg.cy+ch*(6+i+j)); 
				pDC->LineTo(CurRegion.cx-2*cw,CurOrg.cy+ch*(6+i+j)); 
			} 
			pDC->MoveTo(CurOrg.cx+2*cw,CurOrg.cy+ch*(6+i)); 
			pDC->LineTo(CurOrg.cx+2*cw,CurOrg.cy+ch*(6+i+iMonths+3)); 
			pDC->MoveTo(CurRegion.cx-2*cw,CurOrg.cy+ch*(6+i)); 
			pDC->LineTo(CurRegion.cx-2*cw,CurOrg.cy+ch*(6+i+iMonths+3)); 
 
			pDC->MoveTo(CurOrg.cx+5*cw,CurOrg.cy+ch*(6+i)); 
			pDC->LineTo(CurOrg.cx+5*cw,CurOrg.cy+ch*(6+i+iMonths+3)); 
			pDC->MoveTo(CurOrg.cx+12*cw,CurOrg.cy+ch*(6+i)); 
			pDC->LineTo(CurOrg.cx+12*cw,CurOrg.cy+ch*(6+i+iMonths+3)); 
			pDC->MoveTo(CurOrg.cx+20*cw,CurOrg.cy+ch*(6+i)); 
			pDC->LineTo(CurOrg.cx+20*cw,CurOrg.cy+ch*(6+i+iMonths+3)); 
			pDC->MoveTo(CurOrg.cx+28*cw,CurOrg.cy+ch*(6+i)); 
			pDC->LineTo(CurOrg.cx+28*cw,CurOrg.cy+ch*(6+i+iMonths+3)); 
			pDC->MoveTo(CurOrg.cx+36*cw,CurOrg.cy+ch*(6+i)); 
			pDC->LineTo(CurOrg.cx+36*cw,CurOrg.cy+ch*(6+i+iMonths+3)); 
		} 
 
		pDC->SetTextAlign(TA_LEFT); 
	 
	}	 
 
 
} 
 
void CChildView::OnFilePrint() 
{ 
	CView::OnFilePrint(); 
} 
 
BOOL CChildView::OnPreparePrinting(CPrintInfo* pInfo)  
{ 
	// TODO: call DoPreparePrinting to invoke the Print dialog box 
//	CAttendanceApp* app=(CAttendanceApp*)AfxGetApp();//岚增 
//	app->OnFilePrintSetup(); 
 	CAttendanceApp* app=(CAttendanceApp*)AfxGetApp(); 
//	m_nCurPage = 0; 
//	m_nMaxPage = (app->m_pMiddle->m_iMonths+1)/2+1; 
	if(app->m_pMiddle->m_iPrtSel==2) 
		pInfo->SetMaxPage((app->m_pMiddle->m_iMonths+1)/2+1); 
	return CWrapperView::OnPreparePrinting(pInfo); 
} 
 
void CChildView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)  
{ 
	// TODO: Add your specialized code here and/or call the base class 
	 
	CWrapperView::OnBeginPrinting(pDC, pInfo); 
} 
 
void CChildView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)  
{ 
	// TODO: Add your specialized code here and/or call the base class 
 	CAttendanceApp* app=(CAttendanceApp*)AfxGetApp(); 
//	pDC->SetMapMode(MM_LOENGLISH); 
/*	pInfo->m_nCurPage++; 
//	pDC->SetMapMode(MM_ANISOTROPIC); 
	pDC->SetWindowExt(1440,1440); 
	pDC->SetViewportExt(pDC->GetDeviceCaps(LOGPIXELSX),-pDC->GetDeviceCaps(LOGPIXELSY)); 
*/	if(app->m_pMiddle->m_iPrtSel==2) 
	{ 
		//分页 
		int pageHeight=pDC->GetDeviceCaps(VERTRES); 
		int	y=pageHeight*(pInfo->m_nCurPage-1); 
		pDC->SetViewportOrg(0,-y); 
	} 
	else 
	{ 
	CWrapperView::OnPrepareDC(pDC, pInfo); 
	} 
}