📄 invoicedlg.cpp
字号:
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 + -