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); } }