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

📄 invoicedlg.cpp

📁 打印发票程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		pOldPen=pDC->SelectObject (&pen1);
		//画横线
		for(i=1;i<=5;i++)
		{
			pDC->MoveTo (int(Orient.form .left *rato),
				int((Orient.form .top +i*8)*rato));
			pDC->LineTo (int(Orient.form .right *rato),
				int((Orient.form .top +i*8)*rato));
		}

		//画竖线
		pDC->MoveTo (int((Orient.form .left +15)*rato),
				int((Orient.form .top )*rato));
		pDC->LineTo (int((Orient.form .left +15)*rato),
				int((Orient.form .top +4*8)*rato));
		pDC->MoveTo (int((Orient.form .left +60)*rato),
				int((Orient.form .top )*rato));
		pDC->LineTo (int((Orient.form .left +60)*rato),
				int((Orient.form .top +4*8)*rato));
		pDC->MoveTo (int((Orient.form .left +79)*rato),
				int((Orient.form .top )*rato));
		pDC->LineTo (int((Orient.form .left +79)*rato),
				int((Orient.form .top +4*8)*rato));
		pDC->MoveTo (int((Orient.form .left +91)*rato),
				int((Orient.form .top )*rato));
		pDC->LineTo (int((Orient.form .left +91)*rato),
				int((Orient.form .top +4*8)*rato));
		pDC->MoveTo (int((Orient.form .left +108)*rato),
				int((Orient.form .top )*rato));
		pDC->LineTo (int((Orient.form .left +108)*rato),
				int((Orient.form .top +4*8)*rato));
		pDC->MoveTo (int((Orient.form .left +125)*rato),
				int((Orient.form .top )*rato));
		pDC->LineTo (int((Orient.form .left +125)*rato),
				int((Orient.form .top +5*8)*rato));

		pDC->MoveTo (int((Orient.form .left +22)*rato),
				int((Orient.form .top +5*8)*rato));
		pDC->LineTo (int((Orient.form .left +22)*rato),
				int((Orient.form .bottom)*rato));

		//画金额线
		pDC->MoveTo (int((Orient.form .left +125)*rato),
				int((Orient.form .top +4)*rato));
		pDC->LineTo (int((Orient.form .right)*rato),
				int((Orient.form .top +4)*rato));

		pDC->MoveTo (int((Orient.form .left +125+4*1)*rato),
				int((Orient.form .top +4)*rato));
		pDC->LineTo (int((Orient.form .left +125+4*1)*rato),
				int((Orient.form .top +5*8)*rato));
		pDC->MoveTo (int((Orient.form .left +125+4*3)*rato),
				int((Orient.form .top +4)*rato));
		pDC->LineTo (int((Orient.form .left +125+4*3)*rato),
				int((Orient.form .top +5*8)*rato));
		pDC->MoveTo (int((Orient.form .left +125+4*4)*rato),
				int((Orient.form .top +4)*rato));
		pDC->LineTo (int((Orient.form .left +125+4*4)*rato),
				int((Orient.form .top +5*8)*rato));
		pDC->MoveTo (int((Orient.form .left +125+4*6)*rato),
				int((Orient.form .top +4)*rato));
		pDC->LineTo (int((Orient.form .left +125+4*6)*rato),
				int((Orient.form .top +5*8)*rato));
		//换粗线
		pOldPen=pDC->SelectObject (&pen2);
		pDC->MoveTo (int((Orient.form .left +125+4*2)*rato),
				int((Orient.form .top +4)*rato));
		pDC->LineTo (int((Orient.form .left +125+4*2)*rato),
				int((Orient.form .top +5*8)*rato));
		pDC->MoveTo (int((Orient.form .left +125+4*5)*rato),
				int((Orient.form .top +4)*rato));
		pDC->LineTo (int((Orient.form .left +125+4*5)*rato),
				int((Orient.form .top +5*8)*rato));

		rect.left= int(Orient.form .left*rato);
		rect.right =int((Orient.form .left +15)*rato);
		rect.top = int(Orient.form .top*rato);
		rect.bottom =int((Orient.form .top+8)*rato);
		pOldFont=pDC->SelectObject(&font90);
		pDC->DrawText ("编 号",-1,&rect,DT_VCENTER|DT_CENTER|DT_SINGLELINE);

		rect.left=int((Orient.form .left +15)*rato);
		rect.right =int((Orient.form .left +60)*rato);
		pDC->DrawText ("商  品  名  称",
			-1,&rect,DT_VCENTER|DT_CENTER|DT_SINGLELINE);

		rect.left =int((Orient.form .left +60)*rato);
		rect.right =int((Orient.form .left +79)*rato);
		pDC->DrawText ("规 格",-1,&rect,DT_VCENTER|DT_CENTER|DT_SINGLELINE);

		rect.left =int((Orient.form .left +79)*rato);
		rect.right =int((Orient.form .left +91)*rato);
		pDC->DrawText ("单位",-1,&rect,DT_VCENTER|DT_CENTER|DT_SINGLELINE);

		rect.left =int((Orient.form .left +91)*rato);
		rect.right =int((Orient.form .left +108)*rato);
		pDC->DrawText ("数 量",-1,&rect,DT_VCENTER|DT_CENTER|DT_SINGLELINE);

		rect.left =int((Orient.form .left +108)*rato);
		rect.right =int((Orient.form .left +125)*rato);
		pDC->DrawText ("单 价",-1,&rect,DT_VCENTER|DT_CENTER|DT_SINGLELINE);

		rect.left =int((Orient.form .left +125)*rato);
		rect.right =int(Orient.form .right*rato);
		rect.bottom =int((Orient.form .top +4)*rato);
		pDC->DrawText ("金    额",-1,&rect,DT_VCENTER|DT_CENTER|DT_SINGLELINE);

		rect.left =int((Orient.form .left +125)*rato);
		rect.right =int((Orient.form .left +125+4*1)*rato);
		rect.top =int((Orient.form .top +4)*rato);
		rect.bottom =int((Orient.form .top+8)*rato);
		pDC->DrawText ("万",-1,&rect,DT_VCENTER|DT_CENTER|DT_SINGLELINE);

		rect.left =int((Orient.form .left +125+4*1)*rato);
		rect.right =int((Orient.form .left +125+4*2)*rato);
		pDC->DrawText ("千",-1,&rect,DT_VCENTER|DT_CENTER|DT_SINGLELINE);

		rect.left =int((Orient.form .left +125+4*2)*rato);
		rect.right =int((Orient.form .left +125+4*3)*rato);
		pDC->DrawText ("百",-1,&rect,DT_VCENTER|DT_CENTER|DT_SINGLELINE);

		rect.left =int((Orient.form .left +125+4*3)*rato);
		rect.right =int((Orient.form .left +125+4*4)*rato);
		pDC->DrawText ("十",-1,&rect,DT_VCENTER|DT_CENTER|DT_SINGLELINE);

		rect.left =int((Orient.form .left +125+4*4)*rato);
		rect.right =int((Orient.form .left +125+4*5)*rato);
		pDC->DrawText ("元",-1,&rect,DT_VCENTER|DT_CENTER|DT_SINGLELINE);

		rect.left =int((Orient.form .left +125+4*5)*rato);
		rect.right =int((Orient.form .left +125+4*6)*rato);
		pDC->DrawText ("角",-1,&rect,DT_VCENTER|DT_CENTER|DT_SINGLELINE);

		rect.left =int((Orient.form .left +125+4*6)*rato);
		rect.right =int((Orient.form .left +125+4*7)*rato);
		pDC->DrawText ("分",-1,&rect,DT_VCENTER|DT_CENTER|DT_SINGLELINE);

		rect.left =int(Orient.form .left *rato);
		rect.right =int((Orient.form .left +125)*rato);
		rect.top =int((Orient.form .top +4*8)*rato);
		rect.bottom =int((Orient.form .top +5*8)*rato);
		pDC->DrawText ("小    写    金    额    合    计",
			-1,&rect,DT_VCENTER|DT_CENTER|DT_SINGLELINE);

		rect.right =int((Orient.form .left +22)*rato);
		rect.top =int((Orient.form .top +5*8)*rato);
		rect.bottom =int(Orient.form .bottom*rato);
		pDC->DrawText ("大写金额",-1,&rect,DT_VCENTER|DT_CENTER|DT_SINGLELINE);
		
		pDC->TextOut(int((Orient.form .left+38+17.5*0)*rato),
			int((Orient.form .top+5*8+4.5)*rato),"万");
		pDC->TextOut(int((Orient.form .left+38+17.5*1)*rato),
			int((Orient.form .top+5*8+4.5)*rato),"仟");
		pDC->TextOut(int((Orient.form .left+38+17.5*2)*rato),
			int((Orient.form .top+5*8+4.5)*rato),"佰");
		pDC->TextOut(int((Orient.form .left+38+17.5*3)*rato),
			int((Orient.form .top+5*8+4.5)*rato),"拾");
		pDC->TextOut(int((Orient.form .left+38+17.5*4)*rato),
			int((Orient.form .top+5*8+4.5)*rato),"元");
		pDC->TextOut(int((Orient.form .left+38+17.5*5)*rato),
			int((Orient.form .top+5*8+4.5)*rato),"角");
		pDC->TextOut(int((Orient.form .left+38+17.5*6)*rato),
			int((Orient.form .top+5*8+4.5)*rato),"分");

	}

	//显示开票单位和开票人标题
	if(!pDC->IsPrinting ())
	{
		pDC->TextOut(int(Orient.Company.x*rato),
			int(Orient.Company.y*rato),"开票单位(盖章)");

		pDC->TextOut(int(Orient.Invoiceman.x*rato),
			int(Orient.Invoiceman.y*rato),"开票人:");
	}

	for(i=0;i<InvoiceData.sn ;i++)
	{
		//显示编号
		rect.left =int(Orient.form .left *rato);
		rect.right =int((Orient.form .left +15)*rato);
		rect.top =int((Orient.form .top +(i+1)*8)*rato);
		rect.bottom =int((Orient.form .top+(i+2)*8)*rato);
		pDC->DrawText (itoa(i+1,Buffer,10),-1,
			&rect,DT_VCENTER|DT_CENTER|DT_SINGLELINE);

		//显示商品名称
		rect.left =int((Orient.form .left +15)*rato);
		rect.right =int((Orient.form .left +60)*rato);
		pDC->DrawText (InvoiceData.m_Commodity [i].m_CommodityName,
			-1,&rect,DT_VCENTER|DT_CENTER|DT_SINGLELINE);

		//显示商品规格
		rect.left =int((Orient.form .left +60)*rato);
		rect.right =int((Orient.form .left +79)*rato);
		pDC->DrawText (InvoiceData.m_Commodity [i].m_Specification,
			-1,&rect,DT_VCENTER|DT_CENTER|DT_SINGLELINE);

		//显示商品单位
		rect.left =int((Orient.form .left +79)*rato);
		rect.right =int((Orient.form .left +91)*rato);
		pDC->DrawText (InvoiceData.m_Commodity [i].m_Unit,
			-1,&rect,DT_VCENTER|DT_CENTER|DT_SINGLELINE);

		//显示商品数量
		if(InvoiceData.m_Commodity [i].m_Number)
		{
			rect.left =int((Orient.form .left +91)*rato);
			rect.right =int((Orient.form .left +108)*rato);
			itoa(InvoiceData.m_Commodity [i].m_Number,Buffer,10);
			pDC->DrawText (Buffer,-1,&rect,DT_VCENTER|DT_CENTER|DT_SINGLELINE);
		}

		//显示商品单价
		if(InvoiceData.m_Commodity [i].m_UnitPrice!=0.0)
		{
			rect.left =int((Orient.form .left +108)*rato);
			rect.right =int((Orient.form .left +125)*rato);
			itoa(int(InvoiceData.m_Commodity [i].m_UnitPrice*100),Buffer,10);
			strcpy(TempBuffer,&Buffer[strlen(Buffer)-2]);
			strcpy(&Buffer[strlen(Buffer)-2],".");
			strcat(Buffer,TempBuffer);
			pDC->DrawText (Buffer,-1,&rect,DT_VCENTER|DT_CENTER|DT_SINGLELINE);
		}	

		//显示商品总价格
		itoa(InvoiceData.m_Commodity [i].m_Sum,Buffer,10);
		for(j=strlen(Buffer);j>0;j--)
		{
			rect.left =int((Orient.form .right-(strlen(Buffer)-j+1)*4)*rato);
			rect.right =int((Orient.form .right-(strlen(Buffer)-j)*4)*rato);
			pDC->DrawText (&Buffer[j-1],1,&rect,DT_VCENTER|DT_CENTER|DT_SINGLELINE);
		}
	}

	//显示所有商品总价格
	if(InvoiceData.sn)
	{
		itoa(InvoiceData.m_SumMoney,Buffer,10);
		rect.top =int((Orient.form .top +4*8)*rato);
		rect.bottom =int((Orient.form .top+5*8)*rato);
		for(j=strlen(Buffer);j>0;j--)
		{
			rect.left =int((Orient.form .right-(strlen(Buffer)-j+1)*4)*rato);
			rect.right =int((Orient.form .right-(strlen(Buffer)-j)*4)*rato);
			pDC->DrawText (&Buffer[j-1],1,&rect,DT_VCENTER|DT_CENTER|DT_SINGLELINE);
		}
	}

	if(strlen(Buffer)<6)
	{
		rect.left =int((Orient.form .right-(strlen(Buffer)+1)*4)*rato);
		rect.right =int((Orient.form .right-(strlen(Buffer))*4)*rato);
		pDC->DrawText ("¥",2,&rect,DT_VCENTER|DT_CENTER|DT_SINGLELINE);
	}

	//显示汉字大写总价格
	if(InvoiceData.sn)
	{
		TempBuffer[0]='\0';
		j=strlen(Buffer);
		for(i=0;i<j ;i++)
		{
			switch(Buffer[i])
			{
				case '1':strcat(TempBuffer,"壹");
					break;
				case '2':strcat(TempBuffer,"贰");
					break;
				case '3':strcat(TempBuffer,"叁");
					break;
				case '4':strcat(TempBuffer,"肆");
					break;
				case '5':strcat(TempBuffer,"伍");
					break;
				case '6':strcat(TempBuffer,"陆");
					break;
				case '7':strcat(TempBuffer,"柒");
					break;
				case '8':strcat(TempBuffer,"捌");
					break;
				case '9':strcat(TempBuffer,"玖");
					break;
				case '0':strcat(TempBuffer,"零");
					break;
			}

		}
		for(i=j-1;i>=0;i--)
		{
			rect.top =int((Orient.form .top +5*8)*rato);
			rect.bottom =int(Orient.form .bottom *rato);
			rect.left =int((Orient.form .right-(j-i-1)*17.5-18)*rato);
			rect.right =int((Orient.form .right-(j-i-1)*17.5-13)*rato);
			pDC->DrawText (&TempBuffer[i*2],2,&rect,DT_VCENTER|DT_CENTER|DT_SINGLELINE);

		}
		if(j<6)
		{
			rect.left =int((Orient.form .right-j*17.5-18)*rato);
			rect.right =int((Orient.form .right-j*17.5-13)*rato);
			pDC->DrawText ("*",1,&rect,DT_VCENTER|DT_CENTER|DT_SINGLELINE);
		}

	}

	//显示开票人
	pOldFont=pDC->SelectObject(&font120);
	pDC->TextOut(int((Orient.Invoiceman.x+15)*rato),
		int(Orient.Invoiceman.y*rato),InvoiceData.m_BossName);

	pDC->SelectObject (pOldFont);
	pDC->SelectObject (pOldPen);

	return TRUE;
}

void CInvoiceDlg::GetInfo()
{
	//发票尺寸190*104
	Orient.Size .x =190;
	Orient.Size .y =104;
	//发票标题
	Orient.Caption .x =40;
	Orient.Caption .y =10;
	//横线
	Orient.Line .x =36;
	Orient.Line .y =16;
	//发票联
	Orient.InvoicePage.x =58;
	Orient.InvoicePage .y =21;
	//客户名称标题
	Orient.CustomerCaption .x =21;
	Orient.CustomerCaption .y =33;
	//客户名称
	Orient.CustomerName .x =38;
	Orient.CustomerName .y =32;
	//发票表格
	Orient.form .left =21;
	Orient.form .top =38;
	Orient.form .right =174;
	Orient.form .bottom =90;
	//开票单位
	Orient.Company.x =25;
	Orient.Company.y =92;
	//开票人
	Orient.Invoiceman.x =89;
	Orient.Invoiceman.y =92;

}

void CInvoiceDlg::OnPrintButton() 
{
	// TODO: Add your control notification handler code here

	CDC dc;
	CPrintDialog printDlg(FALSE);
	short printQuality;

	
	printDlg.GetDefaults ();
	DEVMODE *dm = printDlg.GetDevMode(); 
	dm->dmOrientation = DMORIENT_LANDSCAPE;
	dm->dmFields |= DM_ORIENTATION; 
	printQuality=dm->dmPrintQuality;
	//将打印纸大小设为自定义
	dm->dmPaperSize=NULL;
	//定义打印纸的长宽
	dm->dmPaperLength=Orient.Size.y;
	dm->dmPaperWidth=Orient.Size .x;

	dc.Attach(printDlg.CreatePrinterDC());

	dc.m_bPrinting=TRUE;

	CString strTitle;
	strTitle.LoadString (AFX_IDS_APP_TITLE);

	DOCINFO di; // DOCINFO中有相关的打印信息
	::ZeroMemory (&di, sizeof (DOCINFO));
	di.cbSize = sizeof (DOCINFO);
	di.lpszDocName = strTitle;//设置标题
	
	if(dc.StartDoc(&di)==-1)// 开始打印
	{
		MessageBox("StartDoc error");
		return ;
	}
	

	int horze=dc.GetDeviceCaps (HORZRES);
	int vertical=dc.GetDeviceCaps (VERTRES);


	{
		{
			//加入修改信息的语句

			dc.StartPage();
			rato=float(printQuality)/25.4;
			m_bitmapRect.bottom =m_bitmapRect.top+int(Orient.Size .y *rato);
			
			Draw(&dc,&m_bitmapRect);
			dc.EndPage();
		}

	}

	dc.EndDoc();               
	
}

⌨️ 快捷键说明

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