📄 childview.cpp
字号:
// 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);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -