📄 setprintdlg.cpp
字号:
// SetPrintDlg.cpp : implementation file
//
#include "stdafx.h"
#include "TextznPDFPrintDLL.h"
#include "SetPrintDlg.h"
//#include "TextznPDFPrintDLLDlg.h"
#include "Winspool.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define SUCCEEDED(Status) ((HRESULT)(Status) >= 0)
/////////////////////////////////////////////////////////////////////////////
// CSetPrintDlg dialog
CSetPrintDlg::CSetPrintDlg(CWnd* pParent )
: CDialog(CSetPrintDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CSetPrintDlg)
m_copies = 0;
m_tilescale = 0;
m_tileoverlap = 0.0f;
m_removeWhiteMarginb = FALSE;
m_printAsImageb = FALSE;
m_collateb = FALSE;
m_reverseb = FALSE;
m_tileLabelsb = FALSE;
m_waitforcompleteb = FALSE;
m_autorotateandcenterb = FALSE;
m_bPrint = TRUE;
m_bPrintAsDC = FALSE;
pMainDlg = (CTextznPDFPrintDLLDlg*)pParent;
m_PageRange = _T("");
//}}AFX_DATA_INIT
}
void CSetPrintDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSetPrintDlg)
DDX_Control(pDX, IDC_EDIT3, m_tileoverlapC);
DDX_Control(pDX, IDC_EDIT2, m_tilescaleC);
DDX_Control(pDX, IDC_CHECK25, m_autorotateandcenter);
DDX_Control(pDX, IDC_CHECK5, m_waitforcomplete);
DDX_Control(pDX, IDC_CHECK4, m_tileLables);
DDX_Control(pDX, IDC_CHECK19, m_reverse);
DDX_Control(pDX, IDC_CHECK18, m_collate);
DDX_Control(pDX, IDC_CHECK7, m_removeWhiteMargin);
DDX_Control(pDX, IDC_CHECK6, m_printAsImage);
DDX_Control(pDX, IDC_COMBO6, m_evenodd);
DDX_Control(pDX, IDC_COMBO5, m_nup);
DDX_Control(pDX, IDC_COMBO4, m_tilecutmark);
DDX_Control(pDX, IDC_COMBO3, m_pagescaling);
DDX_Control(pDX, IDC_COMBO1, m_context);
DDX_Text(pDX, IDC_EDIT1, m_copies);
DDX_Text(pDX, IDC_EDIT2, m_tilescale);
DDX_Text(pDX, IDC_EDIT3, m_tileoverlap);
DDX_Check(pDX, IDC_CHECK7, m_removeWhiteMarginb);
DDX_Check(pDX, IDC_CHECK6, m_printAsImageb);
DDX_Check(pDX, IDC_CHECK18, m_collateb);
DDX_Check(pDX, IDC_CHECK19, m_reverseb);
DDX_Check(pDX, IDC_CHECK4, m_tileLabelsb);
DDX_Check(pDX, IDC_CHECK5, m_waitforcompleteb);
DDX_Check(pDX, IDC_CHECK25, m_autorotateandcenterb);
DDX_Check(pDX, IDC_CHECK1, m_bPrint);
DDX_Check(pDX, IDC_CHECK2, m_bPrintAsDC);
DDX_Text(pDX, IDC_EDIT6, m_PageRange);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSetPrintDlg, CDialog)
//{{AFX_MSG_MAP(CSetPrintDlg)
ON_BN_CLICKED(IDOK2, OnPrint)
ON_BN_CLICKED(IDCANCEL2, OnCancel2)
ON_CBN_SELCHANGE(IDC_COMBO3, OnSelchangeCombo3)
ON_CBN_SELCHANGE(IDC_COMBO2, OnSelchangeCombo2)
ON_BN_CLICKED(IDC_CHECK1, OnCheck1)
ON_BN_CLICKED(IDC_CHECK2, OnCheck2)
ON_WM_DESTROY()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSetPrintDlg message handlers
void CSetPrintDlg::OnPrint()
{
// TODO: Add your control notification handler code here
CSetPrintDlg::OnOK();
iPrintUpSelector = m_nup.GetCurSel();
iPrintOddEvenRange = m_evenodd.GetCurSel();
iPrintContent = m_context.GetCurSel();
IPrintCutMarks = m_tilecutmark.GetCurSel();
IPrintPageScaling = m_pagescaling.GetCurSel();
if(m_bPrint)
{
CPrintDialog Dlg(false);
CString FilePath,m_pPrintname;
CFileDialog PDFFileDlg(TRUE,".pdf",NULL,OFN_FILEMUSTEXIST|OFN_OVERWRITEPROMPT,"PDF Files(*.pdf)|*.pdf||",this);
if(PDFFileDlg.DoModal() == IDOK)
{
FilePath = PDFFileDlg.GetPathName();
}
else
{
pMainDlg->OnCancel();
return;
}
if(Dlg.DoModal() == IDOK)
{
HDC PDC = Dlg.CreatePrinterDC();
m_pPrintname = Dlg.GetDeviceName();
m_pPrintevent.Initialize(pMainDlg->m_pPrint,DIID__IPDFPrintEvents);
HDC hPrinterDC = NULL ;
HANDLE hPrinter = NULL ;
OpenPrinter( (LPTSTR)(LPCTSTR)m_pPrintname, &hPrinter, NULL ) ;
DWORD cbNeeded = 0 ;
cbNeeded = DocumentProperties( NULL, hPrinter, (LPTSTR)(LPCTSTR)m_pPrintname, NULL, NULL, NULL ) ;
PDEVMODE pDevMode = (PDEVMODE) new BYTE[cbNeeded] ;
memset( pDevMode, 0, cbNeeded ) ;
if (DocumentProperties(NULL, hPrinter, (LPTSTR)(LPCTSTR)m_pPrintname, pDevMode, NULL, DM_OUT_BUFFER) > 0)
HDC hPrinterDC = CreateDC( "winspool", (LPTSTR)(LPCTSTR)m_pPrintname, NULL, pDevMode ) ;
delete[] pDevMode ;
ClosePrinter( hPrinter ) ;
try
{
VARIANT vr ;
V_VT(&vr) = VT_BSTR ;
V_BSTR(&vr) = FilePath.AllocSysString() ;
HRESULT hr = pMainDlg->m_pPrint->Print( m_pPrintname.AllocSysString() ,vr,_bstr_t(""));
}
catch(_com_error e)
{
AfxMessageBox( e.Description() ) ;
}
m_pPrintevent.Uninitialize(pMainDlg->m_pPrint,DIID__IPDFPrintEvents);
}
else
{
pMainDlg->OnCancel();
}
}
if(m_bPrintAsDC)
{
CPrintDialog Dlg(false);
CString FilePath;
CFileDialog PDFFileDlg(TRUE,".pdf",NULL,OFN_FILEMUSTEXIST|OFN_OVERWRITEPROMPT,"PDF(*.pdf)|*.pdf||",this);
if(PDFFileDlg.DoModal())
FilePath = PDFFileDlg.GetPathName();
if(Dlg.DoModal())
{
HDC PDC = Dlg.CreatePrinterDC();
try
{
VARIANT vr ;
V_VT(&vr) = VT_BSTR ;
V_BSTR(&vr) = FilePath.AllocSysString() ;
HRESULT hr = pMainDlg->m_pPrint->PrintWithDC((long)PDC , vr,_bstr_t(""));
}
catch (_com_error e)
{
AfxMessageBox(e.Description());
}
}
}
}
void CSetPrintDlg::OnCancel2()
{
// TODO: Add your control notification handler code here
CSetPrintDlg::OnCancel();
pMainDlg->OnCancel();
}
BOOL CSetPrintDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_context.SetCurSel( m_ContextEnum );
m_evenodd.SetCurSel( m_EvenOddEnum );
m_tilecutmark.SetCurSel( m_TileCutmarkEnum );
m_pagescaling.SetCurSel( m_PageScalingEnum);
m_nup.SetCurSel( m_NupEnum );
UpdateData(false);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CSetPrintDlg::OnSelchangeCombo3()
{
// TODO: Add your control notification handler code here
IPrintPageScaling = m_pagescaling.GetCurSel( );
switch( IPrintPageScaling )
{
case 0:
UpdateData(true);
m_tileoverlapC.EnableWindow(false);
m_nup.EnableWindow(false);
m_tilescaleC.EnableWindow(false);
m_tileLables.EnableWindow(false);
m_tilecutmark.EnableWindow(false);
m_removeWhiteMargin.EnableWindow(true);
m_autorotateandcenter.EnableWindow(true);
UpdateData(false);
break;
case 1:
UpdateData(true);
m_tileoverlapC.EnableWindow(false);
m_nup.EnableWindow(false);
m_tilescaleC.EnableWindow(false);
m_tileLables.EnableWindow(false);
m_tilecutmark.EnableWindow(false);
m_removeWhiteMargin.EnableWindow(true);
m_autorotateandcenter.EnableWindow(true);
UpdateData(false);
break;
case 2:
UpdateData(true);
m_tileoverlapC.EnableWindow(false);
m_nup.EnableWindow(false);
m_tilescaleC.EnableWindow(false);
m_tileLables.EnableWindow(false);
m_tilecutmark.EnableWindow(false);
m_removeWhiteMargin.EnableWindow(true);
m_autorotateandcenter.EnableWindow(true);
UpdateData(false);
break;
case 3:
UpdateData(true);
m_tileoverlapC.EnableWindow(true);
m_nup.EnableWindow(false);
m_tilescaleC.EnableWindow(true);
m_tileLables.EnableWindow(true);
m_tilecutmark.EnableWindow(true);
m_removeWhiteMargin.EnableWindow(true);
m_autorotateandcenter.EnableWindow(false);
UpdateData(false);
break;
case 4:
UpdateData(true);
m_tileoverlapC.EnableWindow(false);
m_nup.EnableWindow(true);
m_tilescaleC.EnableWindow(false);
m_tileLables.EnableWindow(false);
m_tilecutmark.EnableWindow(false);
m_removeWhiteMargin.EnableWindow(true);
m_autorotateandcenter.EnableWindow(true);
UpdateData(false);
break;
case 5:
UpdateData(true);
m_tileoverlapC.EnableWindow(false);
m_nup.EnableWindow(false);
m_tilescaleC.EnableWindow(false);
m_tileLables.EnableWindow(false);
m_tilecutmark.EnableWindow(false);
m_removeWhiteMargin.EnableWindow(true);
m_autorotateandcenter.EnableWindow(false);
UpdateData(false);
break;
}
}
void CSetPrintDlg::OnSelchangeCombo2()
{
// TODO: Add your control notification handler code here
}
void CSetPrintDlg::OnCheck1()
{
// TODO: Add your control notification handler code here
m_bPrintAsDC = false;
m_bPrint = true;
UpdateData(false);
}
void CSetPrintDlg::OnCheck2()
{
// TODO: Add your control notification handler code here
m_bPrint = false;
m_bPrintAsDC = true;
UpdateData(false);
}
void CSetPrintDlg::OnDestroy()
{
CDialog::OnDestroy();
pMainDlg->OnCancel();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -