void CSSP3Dlg::OnButton3()
{
DoPrint(); //打印发票按钮
}
BOOL CSSP3Dlg::DoPreparePrintDC()
{
CPrintDialog dlgPrint(FALSE);// 得到当前系统缺省打印机设置
if(!dlgPrint.GetDefaults()) return FALSE;
hDC = dlgPrint.CreatePrinterDC(); // DC是定义为CDC DC的类成员变量
DEVMODE* pDM;
pDM=(DEVMODE*)dlgPrint.GetDevMode();
ASSERT( pDM != NULL );
pDM->dmOrientation = DMORIENT_PORTRAIT;//竖向//;DMORIENT_LANDSCAPE横向
pDM->dmPaperSize = DMPAPER_USER;
pDM->dmFields |= DM_PAPERSIZE; //允许重新设置纸张大小
pDM->dmPaperLength= 930;
pDM->dmPaperWidth = 1910;
pDM->dmFields |= -1;
ResetDC(hDC,pDM); //使设置的参数发挥作用
::GlobalUnlock(pDM); // 联结打印DC,hDC是定义为HDC hDC的类成员变量
if(!DC.Attach(hDC)) return FALSE;// 设置打印标志
return TRUE;
}
void CSSP3Dlg::DoPrint()
{
if(DoPreparePrintDC()==FALSE)return; //开始一次打印作业
COleDateTime time1 = COleDateTime::GetCurrentTime();
str = "reprots printer";
DOCINFO di;
::ZeroMemory (&di, sizeof (DOCINFO));
di.cbSize=sizeof (DOCINFO);
di.lpszDocName=str;
DC.StartDoc(&di);
DC.StartPage();
//将打印字体选进设备场景
DC.SelectObject(&font);
font.GetLogFont(&lfont);
lfont.lfWeight=80;
//表格内字输出
PrintPj();//发票
// 终止打印作业
pFont.DeleteObject();
font.DeleteObject();
DC.EndPage();
DC.EndDoc();
//清除打印场景
DoClearPrintDC();
}
void CSSP3Dlg::DoClearPrintDC()
{
DC.Detach();
::DeleteDC(hDC);
}
void CSSP3Dlg::PrintPj()
{
CString tmp,tmp1,tmp2,str2,lszh;int zh;
COleDateTime time1 = COleDateTime::GetCurrentTime();
Spen.CreatePen(PS_SOLID,2,RGB(0,0,0));
DC.SelectObject(&pFont);
font.GetLogFont(&lfont);
lfont.lfWeight=50;
iRowPos = 40;
DC.TextOut(200,iRowPos,"xxx公司发票");
DC.SelectObject(&font);
font.GetLogFont(&lfont);
lfont.lfWeight=80;
iRowPos = 120;
...................发票内容
Spen.DeleteObject();
}
当我在一个界面打印后,再进行别一界面处理时,需打印发票,这时,程序执行
if(DoPreparePrintDC()==FALSE)return;
不再打印,请教这是为什么
{
DoPrint(); //打印发票按钮
}
BOOL CSSP3Dlg::DoPreparePrintDC()
{
CPrintDialog dlgPrint(FALSE);// 得到当前系统缺省打印机设置
if(!dlgPrint.GetDefaults()) return FALSE;
hDC = dlgPrint.CreatePrinterDC(); // DC是定义为CDC DC的类成员变量
DEVMODE* pDM;
pDM=(DEVMODE*)dlgPrint.GetDevMode();
ASSERT( pDM != NULL );
pDM->dmOrientation = DMORIENT_PORTRAIT;//竖向//;DMORIENT_LANDSCAPE横向
pDM->dmPaperSize = DMPAPER_USER;
pDM->dmFields |= DM_PAPERSIZE; //允许重新设置纸张大小
pDM->dmPaperLength= 930;
pDM->dmPaperWidth = 1910;
pDM->dmFields |= -1;
ResetDC(hDC,pDM); //使设置的参数发挥作用
::GlobalUnlock(pDM); // 联结打印DC,hDC是定义为HDC hDC的类成员变量
if(!DC.Attach(hDC)) return FALSE;// 设置打印标志
return TRUE;
}
void CSSP3Dlg::DoPrint()
{
if(DoPreparePrintDC()==FALSE)return; //开始一次打印作业
COleDateTime time1 = COleDateTime::GetCurrentTime();
str = "reprots printer";
DOCINFO di;
::ZeroMemory (&di, sizeof (DOCINFO));
di.cbSize=sizeof (DOCINFO);
di.lpszDocName=str;
DC.StartDoc(&di);
DC.StartPage();
//将打印字体选进设备场景
DC.SelectObject(&font);
font.GetLogFont(&lfont);
lfont.lfWeight=80;
//表格内字输出
PrintPj();//发票
// 终止打印作业
pFont.DeleteObject();
font.DeleteObject();
DC.EndPage();
DC.EndDoc();
//清除打印场景
DoClearPrintDC();
}
void CSSP3Dlg::DoClearPrintDC()
{
DC.Detach();
::DeleteDC(hDC);
}
void CSSP3Dlg::PrintPj()
{
CString tmp,tmp1,tmp2,str2,lszh;int zh;
COleDateTime time1 = COleDateTime::GetCurrentTime();
Spen.CreatePen(PS_SOLID,2,RGB(0,0,0));
DC.SelectObject(&pFont);
font.GetLogFont(&lfont);
lfont.lfWeight=50;
iRowPos = 40;
DC.TextOut(200,iRowPos,"xxx公司发票");
DC.SelectObject(&font);
font.GetLogFont(&lfont);
lfont.lfWeight=80;
iRowPos = 120;
...................发票内容
Spen.DeleteObject();
}
当我在一个界面打印后,再进行别一界面处理时,需打印发票,这时,程序执行
if(DoPreparePrintDC()==FALSE)return;
不再打印,请教这是为什么
解决方案 »
- CMake怎么从给DLL添加SVN中的版本信息
- 【急急急】MFC中如何使用ADO连接数据库
- list<CPoint> 和list<CPoint>::iterator是什么意思?
- 游戏图片加载问题?
- 如何用GetStockObject函数设置蓝屏
- 求一电子书 "Microsoft_VisualC++6.0_MFC类库参考手册(一)(上)(下)"
- 关于STL方面, 大家推荐什么书?
- 如何编程更换windows桌面墙纸?
- 如何在程序中删除CEdit控件的内容?
- DWORD 值怎么转换成 CString?
- 大家帮忙看一下 fatal error C1085 错误
- 如何把Hbitmap转换成IPicture?
bPrintSetupOnly = 0
dwFlags = 1310732
DoPreparePrintDC(),主要是设置打印发票时的纸张大小