⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 childview.cpp

📁 出勤管理系统
💻 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 + -