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

📄 invoicedlg.cpp

📁 打印发票程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// invoiceDlg.cpp : implementation file
//

#include "stdafx.h"
#include "invoice.h"
#include "invoiceDlg.h"

#include "AddCommodityDlg.h"
#include "CustomerNameDlg.h"
#include "DecCommodityDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CInvoiceDlg dialog

CInvoiceDlg::CInvoiceDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CInvoiceDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CInvoiceDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

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

BEGIN_MESSAGE_MAP(CInvoiceDlg, CDialog)
	//{{AFX_MSG_MAP(CInvoiceDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_ADD_COMMODITY_BUTTON, OnAddCommodityButton)
	ON_BN_CLICKED(IDC_REWORK_BUTTON, OnReworkButton)
	ON_BN_CLICKED(IDC_DEC_COMMODITY_BUTTON, OnDecCommodityButton)
	ON_BN_CLICKED(IDC_PRINT_BUTTON, OnPrintButton)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CInvoiceDlg message handlers

BOOL CInvoiceDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	
	InvoiceData.sn=0;
	InvoiceData.m_SumMoney =0;
	strcpy(InvoiceData.m_CustomerName ,"清华大学");
	strcpy(InvoiceData.m_BossName ,"机械工业出版社");

	CRect rect;  
	GetClientRect(&rect);//获得客户区大小  
	ScreenToClient(&rect);//将屏幕坐标转化为客户坐标  

	m_bitmapRect.left =rect.left+6 ;
	m_bitmapRect.right =rect.right ;
	m_bitmapRect.top =rect.top ;

	GetInfo();

	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CInvoiceDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CInvoiceDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}

	CDC* pDC;
	pDC=GetDC();

	rato=float(m_bitmapRect.right-m_bitmapRect.left)/Orient.Size .x;
	m_bitmapRect.bottom =m_bitmapRect.top+int(Orient.Size .y *rato);
	Draw(pDC,&m_bitmapRect);
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CInvoiceDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CInvoiceDlg::OnAddCommodityButton() 
{
	// TODO: Add your control notification handler code here
	CAddCommodityDlg AddCommodity;
	int i;

	if(InvoiceData.sn>2)
	{
		MessageBox("发票最多开三项");
		return ;
	}

	if(AddCommodity.DoModal()==IDOK)
	{
		strcpy(InvoiceData.m_Commodity[InvoiceData.sn].m_CommodityName,AddCommodity.m_CommodityName);
		strcpy(InvoiceData.m_Commodity[InvoiceData.sn].m_Specification,AddCommodity.m_Specification);
		strcpy(InvoiceData.m_Commodity[InvoiceData.sn].m_Unit,AddCommodity.m_Unit);
		InvoiceData.m_Commodity[InvoiceData.sn].m_Number=AddCommodity.m_Number;
		InvoiceData.m_Commodity[InvoiceData.sn].m_UnitPrice=AddCommodity.m_UnitPrice;
		InvoiceData.m_Commodity[InvoiceData.sn].m_Sum=int(AddCommodity.m_Sum*100);
	}
	//由单价和数量得出总金额
	if(InvoiceData.m_Commodity[InvoiceData.sn].m_UnitPrice&&
		InvoiceData.m_Commodity[InvoiceData.sn].m_Number&&
		!InvoiceData.m_Commodity[InvoiceData.sn].m_Sum)
	{
		InvoiceData.m_Commodity[InvoiceData.sn].m_Sum=
			int(InvoiceData.m_Commodity[InvoiceData.sn].m_UnitPrice*
			InvoiceData.m_Commodity[InvoiceData.sn].m_Number*
			100);
	}
	//如果总金额不等于由单价和数量计算出的总金额,则报错
	else if(InvoiceData.m_Commodity[InvoiceData.sn].m_UnitPrice&&
			InvoiceData.m_Commodity[InvoiceData.sn].m_Number&&
			abs(InvoiceData.m_Commodity[InvoiceData.sn].m_Sum-
			int(InvoiceData.m_Commodity[InvoiceData.sn].m_UnitPrice*
			InvoiceData.m_Commodity[InvoiceData.sn].m_Number*
			100))>2)
	{
		MessageBox("总金额计算错误,本次输入无效");
		return ;
	}
	else if(!InvoiceData.m_Commodity[InvoiceData.sn].m_UnitPrice&&
		!InvoiceData.m_Commodity[InvoiceData.sn].m_Number&&
		!InvoiceData.m_Commodity[InvoiceData.sn].m_Sum)
	{
		MessageBox("输入错误");
		return ;
	}

	if(InvoiceData.m_Commodity[InvoiceData.sn].m_Sum>=100000)
	{
		MessageBox("本发票金额不能大于100000元");
		return ;
	}

	InvoiceData.m_SumMoney=0;
	for(i=0;i<=InvoiceData.sn ;i++)
	{
		InvoiceData.m_SumMoney+=InvoiceData.m_Commodity[i].m_Sum; 
	}

	if(InvoiceData.m_SumMoney>=100000)
	{
		MessageBox("本发票金额不能大于100000元");
		return ;
	}
	InvoiceData.sn ++;
	Invalidate(TRUE);
}

void CInvoiceDlg::OnReworkButton() 
{
	// TODO: Add your control notification handler code here
	CCustomerNameDlg CustomerName;
	if(CustomerName.DoModal()==IDOK)
	{
		strcpy(InvoiceData.m_CustomerName ,CustomerName.m_CustomerName);
		strcpy(InvoiceData.m_BossName ,CustomerName.m_BossName);
	}
	Invalidate();
}

void CInvoiceDlg::OnDecCommodityButton() 
{
	// TODO: Add your control notification handler code here
	int i,sn;
	CDecCommodityDlg DecCommodity;

	for(i=0;i<InvoiceData.sn;i++)
	{
		DecCommodity.GetString(InvoiceData.m_Commodity[i].m_CommodityName);
	}

	if(DecCommodity.DoModal()==IDOK)
	{
		if((sn=DecCommodity.i)!=CB_ERR)
		{
			if(sn<=InvoiceData.sn-1)
			{
				for(i=sn;i<InvoiceData.sn-1;i++)
				{
					strcpy(InvoiceData.m_Commodity[sn].m_CommodityName,
						InvoiceData.m_Commodity[sn+1].m_CommodityName);
					strcpy(InvoiceData.m_Commodity[sn].m_Specification,
						InvoiceData.m_Commodity[sn+1].m_Specification);
					strcpy(InvoiceData.m_Commodity[sn].m_Unit,
						InvoiceData.m_Commodity[sn+1].m_Unit);
					InvoiceData.m_Commodity[sn].m_Number=
						InvoiceData.m_Commodity[sn+1].m_Number;
					InvoiceData.m_Commodity[sn].m_UnitPrice=
						InvoiceData.m_Commodity[sn+1].m_UnitPrice;
					InvoiceData.m_Commodity[sn].m_Sum=
						InvoiceData.m_Commodity[sn+1].m_Sum;
				}
			}
			InvoiceData.sn-=1;
			
		}
	}
	Invalidate();

}

BOOL CInvoiceDlg::Draw(CDC *pDC,CRect *bitmapRect)
{
	CFont font120,font140,font90, *pOldFont;
	CPen pen1,pen2,*pOldPen;
	CRect rect;
	int i,j;
	int DxWidths[22]={0,30,0,30,0,30,0,30,0
		,30,0,30,0,30,0,30,0,30,0,30,0,30};
	int DxWidths140[6]={0,70,0,70,0,70};
	char Buffer[20],TempBuffer[40];

	if(!pDC->IsPrinting ())
	{
		pDC->SetWindowOrg(0,0); 
		pDC->SetViewportOrg(bitmapRect->left ,bitmapRect->top);
	
		//设置位图背景模式为不透明  
		pDC->SetBkMode(OPAQUE);
		//设置位图背景颜色为白色  
		pDC->SetBkColor(RGB(255,255,255));
		//填充位图 
		pDC->FillSolidRect(0,0,bitmapRect->Width(),
			bitmapRect->Height(),RGB(255,255,255)); 
	}

	//设置文字显示颜色  
	pDC->SetTextColor(RGB(0,0,0));

	//创建点阵字体
	font120.CreatePointFont(120,_T("楷体_GB2312"),pDC);
	//将字体选入
	pOldFont=pDC->SelectObject(&font120);
	//创建画笔
	pen2.CreatePen (PS_SOLID,2,RGB(0,0,0));
	//将画笔选入
	pOldPen=pDC->SelectObject (&pen2);

	if(!pDC->IsPrinting ())
	{
		rect.left =int((Orient.Caption .x)*rato);
		rect.top =int((Orient.Caption .y)*rato);
		rect.right =int((Orient.Caption .x+80)*rato);
		rect.bottom =int((Orient.Caption .y+5)*rato);

		pDC->ExtTextOut(int(Orient.Caption .x*rato),
			int(Orient.Caption .y*rato),
			ETO_CLIPPED,&rect,"北京市商业企业专用发票",22,DxWidths);
		
		
		//画横线
		pDC->MoveTo (int(Orient.Line .x*rato) ,int(Orient.Line .y*rato));
		pDC->LineTo (int((Orient.Line .x+88)*rato) ,int(Orient.Line .y*rato));
		
		
		//显示存根联
		font140.CreatePointFont(140,_T("楷体_GB2312"),pDC);
		pOldFont=pDC->SelectObject(&font140);
		rect.left =int((Orient.InvoicePage.x)*rato);
		rect.top =int((Orient.InvoicePage.y)*rato);
		rect.right =int((Orient.InvoicePage.x+42)*rato);
		rect.bottom =int((Orient.InvoicePage.y+6)*rato);

		pDC->ExtTextOut(int(Orient.InvoicePage.x*rato),
			int(Orient.InvoicePage.y*rato),
			ETO_CLIPPED,&rect,"存根联",6,DxWidths140);


		//显示客户名称标题
		font90.CreatePointFont(90,_T("楷体_GB2312"),pDC);
		pOldFont=pDC->SelectObject(&font90);
		pDC->TextOut (int(Orient.CustomerCaption .x *rato),int(Orient.CustomerCaption .y *rato),"客户名称:");
	}

	//显示客户名称
	pOldFont=pDC->SelectObject(&font120);
	pDC->TextOut (int(Orient.CustomerName .x *rato),
		int(Orient.CustomerName .y *rato),InvoiceData.m_CustomerName );

	//画发票表格
	if(!pDC->IsPrinting ())
	{
		//画表格外边框
		pDC->Rectangle (int(Orient.form.left *rato),int(Orient.form .top *rato),
			int(Orient.form.right *rato),int(Orient.form .bottom *rato));
	
		//创建画笔
		pen1.CreatePen (PS_SOLID,1,RGB(0,0,0));
		//将画笔选入

⌨️ 快捷键说明

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