📄 childview.cpp
字号:
// ChildView.cpp : implementation of the CChildView class
//
#include "stdafx.h"
//#include "Preview.h"
#include "attendance.h"
#include "ChildView.h"
#include <vector>
using std::vector;
#include <algorithm>
using std::random_shuffle;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
IMPLEMENT_DYNCREATE(CChildView, CWrapperView)
/////////////////////////////////////////////////////////////////////////////
// CChildView
CChildView::CChildView()
{
srand( (unsigned)time( NULL ) );
//产生0~15之间的随机数
for(int i=0;i<=30;i++)
{
int srandNumber=(int)(15*(double)rand()/(RAND_MAX+1.0));
dotInfo[i]=0+srandNumber;
}
}
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)
{
TEXTMETRIC tm;
pDC->GetTextMetrics(&tm);
int cw=tm.tmMaxCharWidth;
int ch=tm.tmHeight;
pDC->SetMapMode(MM_TEXT);
SIZE CurOrg;
CurOrg.cx=0;
CurOrg.cy=0;
//打印区域的宽度和高度
SIZE CurRegion;
CurRegion.cx=0;
CurRegion.cy=0;
pDC->HIMETRICtoDP(&CurOrg);
CurOrg.cx+=140;
pDC->HIMETRICtoDP(&CurRegion);
CurRegion.cx=pDC->GetDeviceCaps(HORZRES)-CurRegion.cx;
CurRegion.cy=pDC->GetDeviceCaps(VERTRES)-CurRegion.cy;
CFont ft,*pOldFont;
LOGFONT lf;
//图标标题
CString s="磨辊表面形状曲线";
CSize size;
CRect rect;
CBrush Brugreen;
Brugreen.CreateSolidBrush(RGB(0,0,0));
//输出页面边框
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/30;// lf.lfHeight=ch*30/16;
lf.lfWidth=cw*26/40;// lf.lfWidth=cw*26/25;
lf.lfWeight=FW_THIN;//FW_REGULAR FW_BLACK
ft.CreateFontIndirect(&lf);
pOldFont=pDC->SelectObject(&ft);
//输出标题
size=pDC->GetOutputTextExtent(s);
pDC->SetTextAlign(TA_CENTER);
pDC->TextOut((CurOrg.cx+CurRegion.cx)/2,size.cy/2,s);//pDC->TextOut((CurOrg.cx+CurRegion.cx)/2,CurOrg.cy-size.cy/2,s);
pDC->SetTextAlign(TA_LEFT);
pDC->SelectObject(pOldFont);
ft.DeleteObject();
//行距
int lineDis=60;
s.Format("制作人:陈志国");
pDC->TextOut(CurOrg.cx+45*cw,CurOrg.cy+ch,s);//size.cy
//获取时间
CTime m_Time=CTime::GetCurrentTime();
CString str_time;
str_time.Format("时 间:%d/%.2d/%.2d %.2d:%.2d:%.2d",m_Time.GetYear(),m_Time.GetMonth(),m_Time.GetDay(),m_Time.GetHour(),m_Time.GetMinute(),m_Time.GetSecond());
s=str_time;
pDC->TextOut(CurOrg.cx+45*cw,CurOrg.cy+ch+(int)(1.5*lineDis),s);//size.cy
//Y坐标轴左边距
int dotXcoord=280;//原点X坐标
int dotYcoord=1440;
//Y轴坐标单位
s.Format("u m");
pDC->TextOut(dotXcoord-50,CurOrg.cy+ch+(int)(1.5*lineDis),s);//size.cy
//画Y坐标轴
pDC->MoveTo(dotXcoord,CurOrg.cy+ch+3*lineDis);
pDC->LineTo(dotXcoord,CurOrg.cy+ch+45*lineDis);
//Y轴箭头
pDC->MoveTo(dotXcoord,CurOrg.cy+ch+3*lineDis);
pDC->LineTo(dotXcoord-40,CurOrg.cy+ch+3*lineDis+40);
pDC->MoveTo(dotXcoord,CurOrg.cy+ch+3*lineDis);
pDC->LineTo(dotXcoord+40,CurOrg.cy+ch+3*lineDis+40);
//Y轴刻度
for(int i=0;i<6;i++)
{
s.Format("%d",10*i);
pDC->TextOut(dotXcoord-80,dotYcoord-180*i-25,s);
for(int j=1;j<5;j++)
{
pDC->MoveTo(dotXcoord,dotYcoord-180*i-j*36);
pDC->LineTo(dotXcoord+25,dotYcoord-180*i-j*36);
}
//第五条刻度稍长
pDC->MoveTo(dotXcoord,dotYcoord-180*i-j*36);
pDC->LineTo(dotXcoord+35,dotYcoord-180*i-j*36);
}
s.Format("%d",10*i);
pDC->TextOut(dotXcoord-80,dotYcoord-180*i-25,s);
for(i=1;i<=6;i++)
{
s.Format("%d",10*i*-1);
pDC->TextOut(dotXcoord-110,dotYcoord+180*i-25,s);
for(int j=1;j<5;j++)
{
pDC->MoveTo(dotXcoord,dotYcoord+180*(i-1)+j*36);
pDC->LineTo(dotXcoord+25,dotYcoord+180*(i-1)+j*36);
}
//第五条线稍长
pDC->MoveTo(dotXcoord,dotYcoord+180*(i-1)+j*36);
pDC->LineTo(dotXcoord+35,dotYcoord+180*(i-1)+j*36);
}
//X轴坐标单位
s.Format("m m");
pDC->TextOut(dotXcoord+58*cw,dotYcoord-40,s);
//画X坐标轴
pDC->MoveTo(dotXcoord,dotYcoord);
pDC->LineTo(dotXcoord+57*cw,dotYcoord);//CurOrg.cy+ch+23*lineDis
//X轴箭头
pDC->MoveTo(dotXcoord+57*cw,dotYcoord);
pDC->LineTo(dotXcoord+57*cw-40,dotYcoord-40);
pDC->MoveTo(dotXcoord+57*cw,dotYcoord);
pDC->LineTo(dotXcoord+57*cw-40,dotYcoord+40);
//X轴刻度间隔
int xAxisDist=50;
//X轴刻度
for(i=1;i<=30;i++)
{
if(i%2==0)
{
s.Format("%d",xAxisDist*i);
pDC->TextOut(dotXcoord+i*110-40,dotYcoord+40,s);
}
for(int j=1;j<5;j++)
{
pDC->MoveTo(dotXcoord+(i-1)*110+j*22,dotYcoord);
pDC->LineTo(dotXcoord+(i-1)*110+j*22,dotYcoord-25);
}
//第五点刻度稍长
pDC->MoveTo(dotXcoord+(i-1)*110+j*22,dotYcoord);
pDC->LineTo(dotXcoord+(i-1)*110+j*22,dotYcoord-35);
}
/*
vector<int> vi;
for (i = 0; i < 31; i++)
vi.push_back(i);//现在向量包含了 100 个 0-99 之间的整数并且按升序排列
//打乱元素
random_shuffle(vi.begin(), vi.end());
*/
int dotInfo[101];
srand( (unsigned)time( NULL ) );
//产生0~15之间的随机数
for(i=0;i<=100;i++)
{
int srandNumber=(int)(4*(double)rand()/(RAND_MAX+1.0));
dotInfo[i]=10+srandNumber;
}
//打乱数组的元素
random_shuffle(dotInfo, dotInfo+100);
//曲面图形用蓝色画笔画出
//分度为 X: 间隔50 mm,需要110象素
// Y: 间隔10 um,需要180象素
CPen pen,*pOldPen;
pen.CreatePen(PS_SOLID,1,RGB(0,0,255));
pOldPen=pDC->SelectObject(&pen);
//画图 dotInfo
for(i=0;i<30;i++)
{
pDC->MoveTo(dotXcoord+i*110,dotYcoord-dotInfo[i]*18);
pDC->LineTo(dotXcoord+(i+1)*110,dotYcoord-dotInfo[i+1]*18);
}
//还原画笔
pDC->SelectObject(pOldPen);
}
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 + -