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

📄 setprintdlg.cpp

📁 i am server im imi mim im im
💻 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 + -