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

📄 preview.cpp

📁 Visual C++ 的学习资料一
💻 CPP
字号:
// Preview.cpp : implementation file
//

#include "stdafx.h"
#include "fapiao.h"
#include "Preview.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CPreview dialog


CPreview::CPreview(CWnd* pParent /*=NULL*/)
	: CDialog(CPreview::IDD, pParent)
{
	//{{AFX_DATA_INIT(CPreview)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CPreview::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPreview)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CPreview, CDialog)
	//{{AFX_MSG_MAP(CPreview)
	ON_WM_PAINT()
	ON_WM_CTLCOLOR()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPreview message handlers

void CPreview::DrawReport(CRect rect, CDC *pDC, BOOL isprinted)
{
	int printx,printy;
	printx = pDC->GetDeviceCaps(LOGPIXELSX);
	printy = pDC->GetDeviceCaps(LOGPIXELSY);
	double ratex = (double)(printx)/screenx;
	double ratey = (double)(printy)/screeny;
	if(isprinted)
	{
		
		pDC->StartDoc("printinformation");	
	}
	else
	{
		ratex=1,ratey=1;
	}
	CFont font130,font150,font90;
	CPen pen1,pen2,*pOldPen;
	font130.CreatePointFont(130,_T("宋体"),pDC);
	pDC->SelectObject(&font130);
	rect.DeflateRect(0,(int)(ratey*30),0,0);
	pDC->DrawText("北京市商业企业专用发票",rect,DT_CENTER);
	font150.CreatePointFont(150,_T("宋体"),pDC);
	pDC->SelectObject(&font150);
	rect.DeflateRect(0,(int)(ratey*40),0,0);
	pDC->DrawText("发  票  联",rect,DT_CENTER);
	pen1.CreatePen (PS_SOLID,2,RGB(0,0,0));
	pOldPen=pDC->SelectObject (&pen1);
	pDC->MoveTo((int)(ratex*170),(int)(ratey*50));
	pDC->LineTo((int)(ratex*390),(int)(ratey*50));
	//画表格外边框
	pDC->Rectangle ((int)(ratex*25),(int)(ratey*140),526,300);
	//画粗线
	pDC->MoveTo ((int)(ratex*441),(int)(ratey*152));
	pDC->LineTo ((int)(ratex*441),(int)(ratey*260));
	pDC->MoveTo ((int)(ratex*492),(int)(ratey*152));
	pDC->LineTo ((int)(ratex*492),(int)(ratey*260));		
	//创建画笔
	pen2.CreatePen (PS_SOLID,1,RGB(0,0,0));
	//将画笔选入
	pOldPen=pDC->SelectObject (&pen2);
	pDC->MoveTo((int)(ratex*75),(int)(ratey*130));
	pDC->LineTo((int)(ratex*205),(int)(ratey*130));
	pDC->MoveTo((int)(ratex*296),(int)(ratey*130));
	pDC->LineTo((int)(ratex*400),(int)(ratey*130));
	//画横线
	for(int i=1;i<=5;i++)
	{
		pDC->MoveTo ((int)(ratex*25),(int)(ratey*140+i*24));
		pDC->LineTo ((int)(ratex*526),(int)(ratey*140+i*24));
	}
	//画竖线
	pDC->MoveTo ((int)(ratex*75),(int)(ratey*140));
	pDC->LineTo ((int)(ratex*75),(int)(ratey*236));
	pDC->MoveTo ((int)(ratex*205),(int)(ratey*140));
	pDC->LineTo ((int)(ratex*205),(int)(ratey*236));
	pDC->MoveTo ((int)(ratex*254),(int)(ratey*140));
	pDC->LineTo ((int)(ratex*254),(int)(ratey*236));
	pDC->MoveTo ((int)(ratex*296),(int)(ratey*140));
	pDC->LineTo ((int)(ratex*296),(int)(ratey*236));
	pDC->MoveTo ((int)(ratex*343),(int)(ratey*140));
	pDC->LineTo ((int)(ratex*343),(int)(ratey*236));
	pDC->MoveTo ((int)(ratex*390),(int)(ratey*140));
	pDC->LineTo ((int)(ratex*390),(int)(ratey*260));
	pDC->MoveTo ((int)(ratex*120),(int)(ratey*260));
	pDC->LineTo ((int)(ratex*120),(int)(ratey*300));
	//画金额线
	pDC->MoveTo ((int)(ratex*390),(int)(ratey*152));
	pDC->LineTo ((int)(ratex*524),(int)(ratey*152));
	pDC->MoveTo ((int)(ratex*407),(int)(ratey*152));
	pDC->LineTo ((int)(ratex*407),(int)(ratey*260));
	pDC->MoveTo ((int)(ratex*424),(int)(ratey*152));
	pDC->LineTo ((int)(ratex*424),(int)(ratey*260));
	pDC->MoveTo ((int)(ratex*458),(int)(ratey*152));
	pDC->LineTo ((int)(ratex*458),(int)(ratey*260));
	pDC->MoveTo ((int)(ratex*475),(int)(ratey*152));
	pDC->LineTo ((int)(ratex*475),(int)(ratey*260));
	pDC->MoveTo ((int)(ratex*509),(int)(ratey*152));
	pDC->LineTo ((int)(ratex*509),(int)(ratey*260));
	font90.CreatePointFont(80,_T("宋体"),pDC);
	pDC->SelectObject(&font90);
	rect.DeflateRect((int)(-460*ratex),(int)(ratey*50),0,0);
	pDC->DrawText("客户名称",rect,DT_CENTER);
	rect.DeflateRect((int)(ratex*100),0,0,0);
	pDC->DrawText(khmc,rect,DT_CENTER);
	rect.DeflateRect((int)(ratex*350),0,0,0);
	pDC->DrawText("支票号",rect,DT_CENTER);
	rect.DeflateRect((int)(ratex*80),0,0,0);
	pDC->DrawText(zph,rect,DT_CENTER);
	for(i=0;i<4;i++)
	{
		if(i==0)
		{
			rect.DeflateRect((int)(-40*ratex),(int)(ratey*25),0,0);
		}
		else
		{
			rect.DeflateRect((int)(-320*ratex),(int)(ratey*25),0,0);
		}
		pDC->DrawText(sarrays[i][0],rect,DT_LEFT);
		rect.DeflateRect((int)(ratex*60),0,0,0);
		pDC->DrawText(sarrays[i][1],rect,DT_LEFT);
		rect.DeflateRect((int)(ratex*130),0,0,0);
		pDC->DrawText(sarrays[i][2],rect,DT_LEFT);
		rect.DeflateRect((int)(ratex*40),0,0,0);
		pDC->DrawText(sarrays[i][3],rect,DT_LEFT);
		rect.DeflateRect((int)(ratex*40),0,0,0);
		pDC->DrawText(sarrays[i][4],rect,DT_LEFT);
		rect.DeflateRect((int)(ratex*50),0,0,0);
		pDC->DrawText(sarrays[i][5],rect,DT_LEFT);
	}
	rect.DeflateRect((int)(-500*ratex),(int)(ratey*25),0,0);
	pDC->DrawText("小     写     金     额    合     计",rect,DT_CENTER);
	rect.DeflateRect((int)(-300*ratex),(int)(ratey*30),0,0);
	pDC->DrawText("大写金额",rect,DT_CENTER);
	rect.DeflateRect((int)(ratex*200),0,0,0);
	pDC->DrawText("拾",rect,DT_CENTER);
	rect.DeflateRect((int)(ratex*100),0,0,0);
	pDC->DrawText("万",rect,DT_CENTER);
	rect.DeflateRect((int)(ratex*100),0,0,0);
	pDC->DrawText("仟",rect,DT_CENTER);
	rect.DeflateRect((int)(ratex*100),0,0,0);
	pDC->DrawText("佰",rect,DT_CENTER);
	rect.DeflateRect((int)(ratex*100),0,0,0);
	pDC->DrawText("拾",rect,DT_CENTER);
	rect.DeflateRect((int)(ratex*100),0,0,0);
	pDC->DrawText("元",rect,DT_CENTER);
	rect.DeflateRect((int)(ratex*100),0,0,0);
	pDC->DrawText("角",rect,DT_CENTER);
	rect.DeflateRect((int)(ratex*100),0,0,0);
	pDC->DrawText("分",rect,DT_CENTER);
	rect.DeflateRect((int)(-870*ratex),(int)(ratey*30),0,0);
	pDC->DrawText("开票单位(盖章)",rect,DT_CENTER);
	rect.DeflateRect((int)(ratex*150),0,0,0);
	pDC->DrawText(kpdw,rect,DT_CENTER);
	rect.DeflateRect((int)(ratex*200),0,0,0);
	pDC->DrawText("开票人:",rect,DT_CENTER);
	rect.DeflateRect((int)(ratex*100),0,0,0);
	pDC->DrawText(kpr,rect,DT_CENTER);
	rect.DeflateRect((int)(ratex*350),0,0,0);
	pDC->DrawText("年    月    日",rect,DT_CENTER);
	rect.DeflateRect((int)(-100*ratex),0,0,0);
	pDC->DrawText(darrays[0],rect,DT_CENTER);
	rect.DeflateRect((int)(ratex*70),0,0,0);
	pDC->DrawText(darrays[1],rect,DT_CENTER);
	rect.DeflateRect((int)(ratex*70),0,0,0);
	pDC->DrawText(darrays[2],rect,DT_CENTER);
	
	rect.DeflateRect((int)(-40*ratex),(int)(-164*ratey),0,0);
	pDC->DrawText("金额",rect,DT_CENTER);
	for(i=0;i<5;i++)
	{
		if(i==0)
		{
			rect.DeflateRect((int)(ratex*13),(int)(ratey*12),0,0);
		}
		else
		{
			rect.DeflateRect((int)(-119*ratex),(int)(ratey*24),0,0);
		}
		pDC->DrawText(arrays[i][0],rect,DT_LEFT);
		rect.DeflateRect((int)(ratex*17),0,0,0);
		pDC->DrawText(arrays[i][1],rect,DT_LEFT);
		rect.DeflateRect((int)(ratex*17),0,0,0);
		pDC->DrawText(arrays[i][2],rect,DT_LEFT);
		rect.DeflateRect((int)(ratex*17),0,0,0);
		pDC->DrawText(arrays[i][3],rect,DT_LEFT);
		rect.DeflateRect((int)(ratex*17),0,0,0);
		pDC->DrawText(arrays[i][4],rect,DT_LEFT);
		rect.DeflateRect((int)(ratex*17),0,0,0);
		pDC->DrawText(arrays[i][5],rect,DT_LEFT);
		rect.DeflateRect((int)(ratex*17),0,0,0);
		pDC->DrawText(arrays[i][6],rect,DT_LEFT);
		rect.DeflateRect((int)(ratex*17),0,0,0);
		pDC->DrawText(arrays[i][7],rect,DT_LEFT);
	}
	rect.DeflateRect((int)(-28*ratex),(int)(ratey*27),0,0);
	pDC->DrawText(arrays[5][7],rect,DT_LEFT);
	rect.DeflateRect((int)(-50*ratex),0,0,0);
	pDC->DrawText(arrays[5][6],rect,DT_LEFT);
	rect.DeflateRect((int)(-50*ratex),0,0,0);
	pDC->DrawText(arrays[5][5],rect,DT_LEFT);
	rect.DeflateRect((int)(-50*ratex),0,0,0);
	pDC->DrawText(arrays[5][4],rect,DT_LEFT);
	rect.DeflateRect((int)(-50*ratex),0,0,0);
	pDC->DrawText(arrays[5][3],rect,DT_LEFT);
	rect.DeflateRect((int)(-50*ratex),0,0,0);
	pDC->DrawText(arrays[5][2],rect,DT_LEFT);
	rect.DeflateRect((int)(-50*ratex),0,0,0);
	pDC->DrawText(arrays[5][1],rect,DT_LEFT);
	rect.DeflateRect((int)(-50*ratex),0,0,0);
	pDC->DrawText(arrays[5][0],rect,DT_LEFT);
	if(isprinted)
	{
		pDC->EndDoc();
	}
}

void CPreview::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	// TODO: Add your message handler code here
	CRect m_rect;
	GetClientRect(m_rect);	
	CDC* pDC = GetDC();
	screenx = pDC->GetDeviceCaps(LOGPIXELSX);
	screeny = pDC->GetDeviceCaps(LOGPIXELSY);
	DrawReport(m_rect,GetDC(),false);
	// Do not call CDialog::OnPaint() for painting messages
}

HBRUSH CPreview::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
	
	// TODO: Change any attributes of the DC here
	CBrush m_brush (RGB(255,255,255));
	
	CRect m_rect;
	GetClientRect(m_rect);
	
	pDC->FillRect(m_rect,&m_brush);
	// TODO: Return a different brush if the default is not desired
	return m_brush;
}

BOOL CPreview::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	sarrays[0][0] = "编号";
	sarrays[0][1] = "商品名称";
	sarrays[0][2] = "规格";
	sarrays[0][3] = "单位";
	sarrays[0][4] = "数量";
	sarrays[0][5] = "单价";
	arrays[0][0] = "十";
	arrays[0][1] = "万";
	arrays[0][2] = "千";
	arrays[0][3] = "百";
	arrays[0][4] = "十";
	arrays[0][5] = "元";
	arrays[0][6] = "角";
	arrays[0][7] = "分";
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CPreview::hanshu()
{
	int m;
	CString	str1,str2;
	for(int i=0;i<4;i++)
	{
		harrays[i].Replace(".","");
		m = harrays[i].GetLength();
		str1 = harrays[i].Left(1);
		arrays[i+1][8-m] = str1;
		str2 = harrays[i].Right(m-1);
		m=str2.GetLength();
		while(m>0)
		{
			str1=str2.Left(1);
			arrays[i+1][8-m]= str1;
			str2=str2.Right(m-1);
			m=str2.GetLength();
		}
	}
	harrays[3].Replace("0","零");
	harrays[3].Replace("1","壹");
	harrays[3].Replace("2","贰");
	harrays[3].Replace("3","叁");
	harrays[3].Replace("4","肆");
	harrays[3].Replace("5","伍");
	harrays[3].Replace("6","陆");
	harrays[3].Replace("7","柒");
	harrays[3].Replace("8","捌");
	harrays[3].Replace("9","玖");
	m = harrays[3].GetLength();
	str1 = harrays[3].Left(2);
	arrays[5][8-m/2] = str1;
	str2 = harrays[3].Right(m-2);
	m=str2.GetLength();
	while(m>0)
	{
		str1=str2.Left(2);
		arrays[5][8-m/2]= str1;
		str2=str2.Right(m-2);
		m=str2.GetLength();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -