www.gusucode.com > VC++个人考勤软件源代码-源码程序 > VC++个人考勤软件源代码-源码程序/code/ChildView.cpp

    // ChildView.cpp : implementation of the CChildView class
// Download by http://www.NewXing.com

#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;j<app->m_pMiddle->m_iHoliday && app->m_pMiddle->m_ArrayHoliday[j]!=i;j++);
				if(j<app->m_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;j<sYearTotal.iHoliday && sYearTotal.ArrayHoliday[j]!=i;j++);
					if(j<sYearTotal.iHoliday)
					{
						s="公休";
						pDC->TextOut(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_nCurPage<m_nMaxPage-1)
					return;
*/			i=0;

		}
		if((app->m_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);
	}
}